<!DOCTYPE html>
<html>
<head><meta charset="utf-8" />
<title>Event Recommendation Test</title><script src="https://cdnjs.cloudflare.com/ajax/libs/require.js/2.1.10/require.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script>

<style type="text/css">
    /*!
*
* Twitter Bootstrap
*
*/
/*!
 * Bootstrap v3.3.7 (http://getbootstrap.com)
 * Copyright 2011-2016 Twitter, Inc.
 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
 */
/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */
html {
  font-family: sans-serif;
  -ms-text-size-adjust: 100%;
  -webkit-text-size-adjust: 100%;
}
body {
  margin: 0;
}
article,
aside,
details,
figcaption,
figure,
footer,
header,
hgroup,
main,
menu,
nav,
section,
summary {
  display: block;
}
audio,
canvas,
progress,
video {
  display: inline-block;
  vertical-align: baseline;
}
audio:not([controls]) {
  display: none;
  height: 0;
}
[hidden],
template {
  display: none;
}
a {
  background-color: transparent;
}
a:active,
a:hover {
  outline: 0;
}
abbr[title] {
  border-bottom: 1px dotted;
}
b,
strong {
  font-weight: bold;
}
dfn {
  font-style: italic;
}
h1 {
  font-size: 2em;
  margin: 0.67em 0;
}
mark {
  background: #ff0;
  color: #000;
}
small {
  font-size: 80%;
}
sub,
sup {
  font-size: 75%;
  line-height: 0;
  position: relative;
  vertical-align: baseline;
}
sup {
  top: -0.5em;
}
sub {
  bottom: -0.25em;
}
img {
  border: 0;
}
svg:not(:root) {
  overflow: hidden;
}
figure {
  margin: 1em 40px;
}
hr {
  box-sizing: content-box;
  height: 0;
}
pre {
  overflow: auto;
}
code,
kbd,
pre,
samp {
  font-family: monospace, monospace;
  font-size: 1em;
}
button,
input,
optgroup,
select,
textarea {
  color: inherit;
  font: inherit;
  margin: 0;
}
button {
  overflow: visible;
}
button,
select {
  text-transform: none;
}
button,
html input[type="button"],
input[type="reset"],
input[type="submit"] {
  -webkit-appearance: button;
  cursor: pointer;
}
button[disabled],
html input[disabled] {
  cursor: default;
}
button::-moz-focus-inner,
input::-moz-focus-inner {
  border: 0;
  padding: 0;
}
input {
  line-height: normal;
}
input[type="checkbox"],
input[type="radio"] {
  box-sizing: border-box;
  padding: 0;
}
input[type="number"]::-webkit-inner-spin-button,
input[type="number"]::-webkit-outer-spin-button {
  height: auto;
}
input[type="search"] {
  -webkit-appearance: textfield;
  box-sizing: content-box;
}
input[type="search"]::-webkit-search-cancel-button,
input[type="search"]::-webkit-search-decoration {
  -webkit-appearance: none;
}
fieldset {
  border: 1px solid #c0c0c0;
  margin: 0 2px;
  padding: 0.35em 0.625em 0.75em;
}
legend {
  border: 0;
  padding: 0;
}
textarea {
  overflow: auto;
}
optgroup {
  font-weight: bold;
}
table {
  border-collapse: collapse;
  border-spacing: 0;
}
td,
th {
  padding: 0;
}
/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */
@media print {
  *,
  *:before,
  *:after {
    background: transparent !important;
    color: #000 !important;
    box-shadow: none !important;
    text-shadow: none !important;
  }
  a,
  a:visited {
    text-decoration: underline;
  }
  a[href]:after {
    content: " (" attr(href) ")";
  }
  abbr[title]:after {
    content: " (" attr(title) ")";
  }
  a[href^="#"]:after,
  a[href^="javascript:"]:after {
    content: "";
  }
  pre,
  blockquote {
    border: 1px solid #999;
    page-break-inside: avoid;
  }
  thead {
    display: table-header-group;
  }
  tr,
  img {
    page-break-inside: avoid;
  }
  img {
    max-width: 100% !important;
  }
  p,
  h2,
  h3 {
    orphans: 3;
    widows: 3;
  }
  h2,
  h3 {
    page-break-after: avoid;
  }
  .navbar {
    display: none;
  }
  .btn > .caret,
  .dropup > .btn > .caret {
    border-top-color: #000 !important;
  }
  .label {
    border: 1px solid #000;
  }
  .table {
    border-collapse: collapse !important;
  }
  .table td,
  .table th {
    background-color: #fff !important;
  }
  .table-bordered th,
  .table-bordered td {
    border: 1px solid #ddd !important;
  }
}
@font-face {
  font-family: 'Glyphicons Halflings';
  src: url('../components/bootstrap/fonts/glyphicons-halflings-regular.eot');
  src: url('../components/bootstrap/fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../components/bootstrap/fonts/glyphicons-halflings-regular.woff2') format('woff2'), url('../components/bootstrap/fonts/glyphicons-halflings-regular.woff') format('woff'), url('../components/bootstrap/fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../components/bootstrap/fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg');
}
.glyphicon {
  position: relative;
  top: 1px;
  display: inline-block;
  font-family: 'Glyphicons Halflings';
  font-style: normal;
  font-weight: normal;
  line-height: 1;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
}
.glyphicon-asterisk:before {
  content: "\002a";
}
.glyphicon-plus:before {
  content: "\002b";
}
.glyphicon-euro:before,
.glyphicon-eur:before {
  content: "\20ac";
}
.glyphicon-minus:before {
  content: "\2212";
}
.glyphicon-cloud:before {
  content: "\2601";
}
.glyphicon-envelope:before {
  content: "\2709";
}
.glyphicon-pencil:before {
  content: "\270f";
}
.glyphicon-glass:before {
  content: "\e001";
}
.glyphicon-music:before {
  content: "\e002";
}
.glyphicon-search:before {
  content: "\e003";
}
.glyphicon-heart:before {
  content: "\e005";
}
.glyphicon-star:before {
  content: "\e006";
}
.glyphicon-star-empty:before {
  content: "\e007";
}
.glyphicon-user:before {
  content: "\e008";
}
.glyphicon-film:before {
  content: "\e009";
}
.glyphicon-th-large:before {
  content: "\e010";
}
.glyphicon-th:before {
  content: "\e011";
}
.glyphicon-th-list:before {
  content: "\e012";
}
.glyphicon-ok:before {
  content: "\e013";
}
.glyphicon-remove:before {
  content: "\e014";
}
.glyphicon-zoom-in:before {
  content: "\e015";
}
.glyphicon-zoom-out:before {
  content: "\e016";
}
.glyphicon-off:before {
  content: "\e017";
}
.glyphicon-signal:before {
  content: "\e018";
}
.glyphicon-cog:before {
  content: "\e019";
}
.glyphicon-trash:before {
  content: "\e020";
}
.glyphicon-home:before {
  content: "\e021";
}
.glyphicon-file:before {
  content: "\e022";
}
.glyphicon-time:before {
  content: "\e023";
}
.glyphicon-road:before {
  content: "\e024";
}
.glyphicon-download-alt:before {
  content: "\e025";
}
.glyphicon-download:before {
  content: "\e026";
}
.glyphicon-upload:before {
  content: "\e027";
}
.glyphicon-inbox:before {
  content: "\e028";
}
.glyphicon-play-circle:before {
  content: "\e029";
}
.glyphicon-repeat:before {
  content: "\e030";
}
.glyphicon-refresh:before {
  content: "\e031";
}
.glyphicon-list-alt:before {
  content: "\e032";
}
.glyphicon-lock:before {
  content: "\e033";
}
.glyphicon-flag:before {
  content: "\e034";
}
.glyphicon-headphones:before {
  content: "\e035";
}
.glyphicon-volume-off:before {
  content: "\e036";
}
.glyphicon-volume-down:before {
  content: "\e037";
}
.glyphicon-volume-up:before {
  content: "\e038";
}
.glyphicon-qrcode:before {
  content: "\e039";
}
.glyphicon-barcode:before {
  content: "\e040";
}
.glyphicon-tag:before {
  content: "\e041";
}
.glyphicon-tags:before {
  content: "\e042";
}
.glyphicon-book:before {
  content: "\e043";
}
.glyphicon-bookmark:before {
  content: "\e044";
}
.glyphicon-print:before {
  content: "\e045";
}
.glyphicon-camera:before {
  content: "\e046";
}
.glyphicon-font:before {
  content: "\e047";
}
.glyphicon-bold:before {
  content: "\e048";
}
.glyphicon-italic:before {
  content: "\e049";
}
.glyphicon-text-height:before {
  content: "\e050";
}
.glyphicon-text-width:before {
  content: "\e051";
}
.glyphicon-align-left:before {
  content: "\e052";
}
.glyphicon-align-center:before {
  content: "\e053";
}
.glyphicon-align-right:before {
  content: "\e054";
}
.glyphicon-align-justify:before {
  content: "\e055";
}
.glyphicon-list:before {
  content: "\e056";
}
.glyphicon-indent-left:before {
  content: "\e057";
}
.glyphicon-indent-right:before {
  content: "\e058";
}
.glyphicon-facetime-video:before {
  content: "\e059";
}
.glyphicon-picture:before {
  content: "\e060";
}
.glyphicon-map-marker:before {
  content: "\e062";
}
.glyphicon-adjust:before {
  content: "\e063";
}
.glyphicon-tint:before {
  content: "\e064";
}
.glyphicon-edit:before {
  content: "\e065";
}
.glyphicon-share:before {
  content: "\e066";
}
.glyphicon-check:before {
  content: "\e067";
}
.glyphicon-move:before {
  content: "\e068";
}
.glyphicon-step-backward:before {
  content: "\e069";
}
.glyphicon-fast-backward:before {
  content: "\e070";
}
.glyphicon-backward:before {
  content: "\e071";
}
.glyphicon-play:before {
  content: "\e072";
}
.glyphicon-pause:before {
  content: "\e073";
}
.glyphicon-stop:before {
  content: "\e074";
}
.glyphicon-forward:before {
  content: "\e075";
}
.glyphicon-fast-forward:before {
  content: "\e076";
}
.glyphicon-step-forward:before {
  content: "\e077";
}
.glyphicon-eject:before {
  content: "\e078";
}
.glyphicon-chevron-left:before {
  content: "\e079";
}
.glyphicon-chevron-right:before {
  content: "\e080";
}
.glyphicon-plus-sign:before {
  content: "\e081";
}
.glyphicon-minus-sign:before {
  content: "\e082";
}
.glyphicon-remove-sign:before {
  content: "\e083";
}
.glyphicon-ok-sign:before {
  content: "\e084";
}
.glyphicon-question-sign:before {
  content: "\e085";
}
.glyphicon-info-sign:before {
  content: "\e086";
}
.glyphicon-screenshot:before {
  content: "\e087";
}
.glyphicon-remove-circle:before {
  content: "\e088";
}
.glyphicon-ok-circle:before {
  content: "\e089";
}
.glyphicon-ban-circle:before {
  content: "\e090";
}
.glyphicon-arrow-left:before {
  content: "\e091";
}
.glyphicon-arrow-right:before {
  content: "\e092";
}
.glyphicon-arrow-up:before {
  content: "\e093";
}
.glyphicon-arrow-down:before {
  content: "\e094";
}
.glyphicon-share-alt:before {
  content: "\e095";
}
.glyphicon-resize-full:before {
  content: "\e096";
}
.glyphicon-resize-small:before {
  content: "\e097";
}
.glyphicon-exclamation-sign:before {
  content: "\e101";
}
.glyphicon-gift:before {
  content: "\e102";
}
.glyphicon-leaf:before {
  content: "\e103";
}
.glyphicon-fire:before {
  content: "\e104";
}
.glyphicon-eye-open:before {
  content: "\e105";
}
.glyphicon-eye-close:before {
  content: "\e106";
}
.glyphicon-warning-sign:before {
  content: "\e107";
}
.glyphicon-plane:before {
  content: "\e108";
}
.glyphicon-calendar:before {
  content: "\e109";
}
.glyphicon-random:before {
  content: "\e110";
}
.glyphicon-comment:before {
  content: "\e111";
}
.glyphicon-magnet:before {
  content: "\e112";
}
.glyphicon-chevron-up:before {
  content: "\e113";
}
.glyphicon-chevron-down:before {
  content: "\e114";
}
.glyphicon-retweet:before {
  content: "\e115";
}
.glyphicon-shopping-cart:before {
  content: "\e116";
}
.glyphicon-folder-close:before {
  content: "\e117";
}
.glyphicon-folder-open:before {
  content: "\e118";
}
.glyphicon-resize-vertical:before {
  content: "\e119";
}
.glyphicon-resize-horizontal:before {
  content: "\e120";
}
.glyphicon-hdd:before {
  content: "\e121";
}
.glyphicon-bullhorn:before {
  content: "\e122";
}
.glyphicon-bell:before {
  content: "\e123";
}
.glyphicon-certificate:before {
  content: "\e124";
}
.glyphicon-thumbs-up:before {
  content: "\e125";
}
.glyphicon-thumbs-down:before {
  content: "\e126";
}
.glyphicon-hand-right:before {
  content: "\e127";
}
.glyphicon-hand-left:before {
  content: "\e128";
}
.glyphicon-hand-up:before {
  content: "\e129";
}
.glyphicon-hand-down:before {
  content: "\e130";
}
.glyphicon-circle-arrow-right:before {
  content: "\e131";
}
.glyphicon-circle-arrow-left:before {
  content: "\e132";
}
.glyphicon-circle-arrow-up:before {
  content: "\e133";
}
.glyphicon-circle-arrow-down:before {
  content: "\e134";
}
.glyphicon-globe:before {
  content: "\e135";
}
.glyphicon-wrench:before {
  content: "\e136";
}
.glyphicon-tasks:before {
  content: "\e137";
}
.glyphicon-filter:before {
  content: "\e138";
}
.glyphicon-briefcase:before {
  content: "\e139";
}
.glyphicon-fullscreen:before {
  content: "\e140";
}
.glyphicon-dashboard:before {
  content: "\e141";
}
.glyphicon-paperclip:before {
  content: "\e142";
}
.glyphicon-heart-empty:before {
  content: "\e143";
}
.glyphicon-link:before {
  content: "\e144";
}
.glyphicon-phone:before {
  content: "\e145";
}
.glyphicon-pushpin:before {
  content: "\e146";
}
.glyphicon-usd:before {
  content: "\e148";
}
.glyphicon-gbp:before {
  content: "\e149";
}
.glyphicon-sort:before {
  content: "\e150";
}
.glyphicon-sort-by-alphabet:before {
  content: "\e151";
}
.glyphicon-sort-by-alphabet-alt:before {
  content: "\e152";
}
.glyphicon-sort-by-order:before {
  content: "\e153";
}
.glyphicon-sort-by-order-alt:before {
  content: "\e154";
}
.glyphicon-sort-by-attributes:before {
  content: "\e155";
}
.glyphicon-sort-by-attributes-alt:before {
  content: "\e156";
}
.glyphicon-unchecked:before {
  content: "\e157";
}
.glyphicon-expand:before {
  content: "\e158";
}
.glyphicon-collapse-down:before {
  content: "\e159";
}
.glyphicon-collapse-up:before {
  content: "\e160";
}
.glyphicon-log-in:before {
  content: "\e161";
}
.glyphicon-flash:before {
  content: "\e162";
}
.glyphicon-log-out:before {
  content: "\e163";
}
.glyphicon-new-window:before {
  content: "\e164";
}
.glyphicon-record:before {
  content: "\e165";
}
.glyphicon-save:before {
  content: "\e166";
}
.glyphicon-open:before {
  content: "\e167";
}
.glyphicon-saved:before {
  content: "\e168";
}
.glyphicon-import:before {
  content: "\e169";
}
.glyphicon-export:before {
  content: "\e170";
}
.glyphicon-send:before {
  content: "\e171";
}
.glyphicon-floppy-disk:before {
  content: "\e172";
}
.glyphicon-floppy-saved:before {
  content: "\e173";
}
.glyphicon-floppy-remove:before {
  content: "\e174";
}
.glyphicon-floppy-save:before {
  content: "\e175";
}
.glyphicon-floppy-open:before {
  content: "\e176";
}
.glyphicon-credit-card:before {
  content: "\e177";
}
.glyphicon-transfer:before {
  content: "\e178";
}
.glyphicon-cutlery:before {
  content: "\e179";
}
.glyphicon-header:before {
  content: "\e180";
}
.glyphicon-compressed:before {
  content: "\e181";
}
.glyphicon-earphone:before {
  content: "\e182";
}
.glyphicon-phone-alt:before {
  content: "\e183";
}
.glyphicon-tower:before {
  content: "\e184";
}
.glyphicon-stats:before {
  content: "\e185";
}
.glyphicon-sd-video:before {
  content: "\e186";
}
.glyphicon-hd-video:before {
  content: "\e187";
}
.glyphicon-subtitles:before {
  content: "\e188";
}
.glyphicon-sound-stereo:before {
  content: "\e189";
}
.glyphicon-sound-dolby:before {
  content: "\e190";
}
.glyphicon-sound-5-1:before {
  content: "\e191";
}
.glyphicon-sound-6-1:before {
  content: "\e192";
}
.glyphicon-sound-7-1:before {
  content: "\e193";
}
.glyphicon-copyright-mark:before {
  content: "\e194";
}
.glyphicon-registration-mark:before {
  content: "\e195";
}
.glyphicon-cloud-download:before {
  content: "\e197";
}
.glyphicon-cloud-upload:before {
  content: "\e198";
}
.glyphicon-tree-conifer:before {
  content: "\e199";
}
.glyphicon-tree-deciduous:before {
  content: "\e200";
}
.glyphicon-cd:before {
  content: "\e201";
}
.glyphicon-save-file:before {
  content: "\e202";
}
.glyphicon-open-file:before {
  content: "\e203";
}
.glyphicon-level-up:before {
  content: "\e204";
}
.glyphicon-copy:before {
  content: "\e205";
}
.glyphicon-paste:before {
  content: "\e206";
}
.glyphicon-alert:before {
  content: "\e209";
}
.glyphicon-equalizer:before {
  content: "\e210";
}
.glyphicon-king:before {
  content: "\e211";
}
.glyphicon-queen:before {
  content: "\e212";
}
.glyphicon-pawn:before {
  content: "\e213";
}
.glyphicon-bishop:before {
  content: "\e214";
}
.glyphicon-knight:before {
  content: "\e215";
}
.glyphicon-baby-formula:before {
  content: "\e216";
}
.glyphicon-tent:before {
  content: "\26fa";
}
.glyphicon-blackboard:before {
  content: "\e218";
}
.glyphicon-bed:before {
  content: "\e219";
}
.glyphicon-apple:before {
  content: "\f8ff";
}
.glyphicon-erase:before {
  content: "\e221";
}
.glyphicon-hourglass:before {
  content: "\231b";
}
.glyphicon-lamp:before {
  content: "\e223";
}
.glyphicon-duplicate:before {
  content: "\e224";
}
.glyphicon-piggy-bank:before {
  content: "\e225";
}
.glyphicon-scissors:before {
  content: "\e226";
}
.glyphicon-bitcoin:before {
  content: "\e227";
}
.glyphicon-btc:before {
  content: "\e227";
}
.glyphicon-xbt:before {
  content: "\e227";
}
.glyphicon-yen:before {
  content: "\00a5";
}
.glyphicon-jpy:before {
  content: "\00a5";
}
.glyphicon-ruble:before {
  content: "\20bd";
}
.glyphicon-rub:before {
  content: "\20bd";
}
.glyphicon-scale:before {
  content: "\e230";
}
.glyphicon-ice-lolly:before {
  content: "\e231";
}
.glyphicon-ice-lolly-tasted:before {
  content: "\e232";
}
.glyphicon-education:before {
  content: "\e233";
}
.glyphicon-option-horizontal:before {
  content: "\e234";
}
.glyphicon-option-vertical:before {
  content: "\e235";
}
.glyphicon-menu-hamburger:before {
  content: "\e236";
}
.glyphicon-modal-window:before {
  content: "\e237";
}
.glyphicon-oil:before {
  content: "\e238";
}
.glyphicon-grain:before {
  content: "\e239";
}
.glyphicon-sunglasses:before {
  content: "\e240";
}
.glyphicon-text-size:before {
  content: "\e241";
}
.glyphicon-text-color:before {
  content: "\e242";
}
.glyphicon-text-background:before {
  content: "\e243";
}
.glyphicon-object-align-top:before {
  content: "\e244";
}
.glyphicon-object-align-bottom:before {
  content: "\e245";
}
.glyphicon-object-align-horizontal:before {
  content: "\e246";
}
.glyphicon-object-align-left:before {
  content: "\e247";
}
.glyphicon-object-align-vertical:before {
  content: "\e248";
}
.glyphicon-object-align-right:before {
  content: "\e249";
}
.glyphicon-triangle-right:before {
  content: "\e250";
}
.glyphicon-triangle-left:before {
  content: "\e251";
}
.glyphicon-triangle-bottom:before {
  content: "\e252";
}
.glyphicon-triangle-top:before {
  content: "\e253";
}
.glyphicon-console:before {
  content: "\e254";
}
.glyphicon-superscript:before {
  content: "\e255";
}
.glyphicon-subscript:before {
  content: "\e256";
}
.glyphicon-menu-left:before {
  content: "\e257";
}
.glyphicon-menu-right:before {
  content: "\e258";
}
.glyphicon-menu-down:before {
  content: "\e259";
}
.glyphicon-menu-up:before {
  content: "\e260";
}
* {
  -webkit-box-sizing: border-box;
  -moz-box-sizing: border-box;
  box-sizing: border-box;
}
*:before,
*:after {
  -webkit-box-sizing: border-box;
  -moz-box-sizing: border-box;
  box-sizing: border-box;
}
html {
  font-size: 10px;
  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
}
body {
  font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
  font-size: 13px;
  line-height: 1.42857143;
  color: #000;
  background-color: #fff;
}
input,
button,
select,
textarea {
  font-family: inherit;
  font-size: inherit;
  line-height: inherit;
}
a {
  color: #337ab7;
  text-decoration: none;
}
a:hover,
a:focus {
  color: #23527c;
  text-decoration: underline;
}
a:focus {
  outline: 5px auto -webkit-focus-ring-color;
  outline-offset: -2px;
}
figure {
  margin: 0;
}
img {
  vertical-align: middle;
}
.img-responsive,
.thumbnail > img,
.thumbnail a > img,
.carousel-inner > .item > img,
.carousel-inner > .item > a > img {
  display: block;
  max-width: 100%;
  height: auto;
}
.img-rounded {
  border-radius: 3px;
}
.img-thumbnail {
  padding: 4px;
  line-height: 1.42857143;
  background-color: #fff;
  border: 1px solid #ddd;
  border-radius: 2px;
  -webkit-transition: all 0.2s ease-in-out;
  -o-transition: all 0.2s ease-in-out;
  transition: all 0.2s ease-in-out;
  display: inline-block;
  max-width: 100%;
  height: auto;
}
.img-circle {
  border-radius: 50%;
}
hr {
  margin-top: 18px;
  margin-bottom: 18px;
  border: 0;
  border-top: 1px solid #eeeeee;
}
.sr-only {
  position: absolute;
  width: 1px;
  height: 1px;
  margin: -1px;
  padding: 0;
  overflow: hidden;
  clip: rect(0, 0, 0, 0);
  border: 0;
}
.sr-only-focusable:active,
.sr-only-focusable:focus {
  position: static;
  width: auto;
  height: auto;
  margin: 0;
  overflow: visible;
  clip: auto;
}
[role="button"] {
  cursor: pointer;
}
h1,
h2,
h3,
h4,
h5,
h6,
.h1,
.h2,
.h3,
.h4,
.h5,
.h6 {
  font-family: inherit;
  font-weight: 500;
  line-height: 1.1;
  color: inherit;
}
h1 small,
h2 small,
h3 small,
h4 small,
h5 small,
h6 small,
.h1 small,
.h2 small,
.h3 small,
.h4 small,
.h5 small,
.h6 small,
h1 .small,
h2 .small,
h3 .small,
h4 .small,
h5 .small,
h6 .small,
.h1 .small,
.h2 .small,
.h3 .small,
.h4 .small,
.h5 .small,
.h6 .small {
  font-weight: normal;
  line-height: 1;
  color: #777777;
}
h1,
.h1,
h2,
.h2,
h3,
.h3 {
  margin-top: 18px;
  margin-bottom: 9px;
}
h1 small,
.h1 small,
h2 small,
.h2 small,
h3 small,
.h3 small,
h1 .small,
.h1 .small,
h2 .small,
.h2 .small,
h3 .small,
.h3 .small {
  font-size: 65%;
}
h4,
.h4,
h5,
.h5,
h6,
.h6 {
  margin-top: 9px;
  margin-bottom: 9px;
}
h4 small,
.h4 small,
h5 small,
.h5 small,
h6 small,
.h6 small,
h4 .small,
.h4 .small,
h5 .small,
.h5 .small,
h6 .small,
.h6 .small {
  font-size: 75%;
}
h1,
.h1 {
  font-size: 33px;
}
h2,
.h2 {
  font-size: 27px;
}
h3,
.h3 {
  font-size: 23px;
}
h4,
.h4 {
  font-size: 17px;
}
h5,
.h5 {
  font-size: 13px;
}
h6,
.h6 {
  font-size: 12px;
}
p {
  margin: 0 0 9px;
}
.lead {
  margin-bottom: 18px;
  font-size: 14px;
  font-weight: 300;
  line-height: 1.4;
}
@media (min-width: 768px) {
  .lead {
    font-size: 19.5px;
  }
}
small,
.small {
  font-size: 92%;
}
mark,
.mark {
  background-color: #fcf8e3;
  padding: .2em;
}
.text-left {
  text-align: left;
}
.text-right {
  text-align: right;
}
.text-center {
  text-align: center;
}
.text-justify {
  text-align: justify;
}
.text-nowrap {
  white-space: nowrap;
}
.text-lowercase {
  text-transform: lowercase;
}
.text-uppercase {
  text-transform: uppercase;
}
.text-capitalize {
  text-transform: capitalize;
}
.text-muted {
  color: #777777;
}
.text-primary {
  color: #337ab7;
}
a.text-primary:hover,
a.text-primary:focus {
  color: #286090;
}
.text-success {
  color: #3c763d;
}
a.text-success:hover,
a.text-success:focus {
  color: #2b542c;
}
.text-info {
  color: #31708f;
}
a.text-info:hover,
a.text-info:focus {
  color: #245269;
}
.text-warning {
  color: #8a6d3b;
}
a.text-warning:hover,
a.text-warning:focus {
  color: #66512c;
}
.text-danger {
  color: #a94442;
}
a.text-danger:hover,
a.text-danger:focus {
  color: #843534;
}
.bg-primary {
  color: #fff;
  background-color: #337ab7;
}
a.bg-primary:hover,
a.bg-primary:focus {
  background-color: #286090;
}
.bg-success {
  background-color: #dff0d8;
}
a.bg-success:hover,
a.bg-success:focus {
  background-color: #c1e2b3;
}
.bg-info {
  background-color: #d9edf7;
}
a.bg-info:hover,
a.bg-info:focus {
  background-color: #afd9ee;
}
.bg-warning {
  background-color: #fcf8e3;
}
a.bg-warning:hover,
a.bg-warning:focus {
  background-color: #f7ecb5;
}
.bg-danger {
  background-color: #f2dede;
}
a.bg-danger:hover,
a.bg-danger:focus {
  background-color: #e4b9b9;
}
.page-header {
  padding-bottom: 8px;
  margin: 36px 0 18px;
  border-bottom: 1px solid #eeeeee;
}
ul,
ol {
  margin-top: 0;
  margin-bottom: 9px;
}
ul ul,
ol ul,
ul ol,
ol ol {
  margin-bottom: 0;
}
.list-unstyled {
  padding-left: 0;
  list-style: none;
}
.list-inline {
  padding-left: 0;
  list-style: none;
  margin-left: -5px;
}
.list-inline > li {
  display: inline-block;
  padding-left: 5px;
  padding-right: 5px;
}
dl {
  margin-top: 0;
  margin-bottom: 18px;
}
dt,
dd {
  line-height: 1.42857143;
}
dt {
  font-weight: bold;
}
dd {
  margin-left: 0;
}
@media (min-width: 541px) {
  .dl-horizontal dt {
    float: left;
    width: 160px;
    clear: left;
    text-align: right;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
  }
  .dl-horizontal dd {
    margin-left: 180px;
  }
}
abbr[title],
abbr[data-original-title] {
  cursor: help;
  border-bottom: 1px dotted #777777;
}
.initialism {
  font-size: 90%;
  text-transform: uppercase;
}
blockquote {
  padding: 9px 18px;
  margin: 0 0 18px;
  font-size: inherit;
  border-left: 5px solid #eeeeee;
}
blockquote p:last-child,
blockquote ul:last-child,
blockquote ol:last-child {
  margin-bottom: 0;
}
blockquote footer,
blockquote small,
blockquote .small {
  display: block;
  font-size: 80%;
  line-height: 1.42857143;
  color: #777777;
}
blockquote footer:before,
blockquote small:before,
blockquote .small:before {
  content: '\2014 \00A0';
}
.blockquote-reverse,
blockquote.pull-right {
  padding-right: 15px;
  padding-left: 0;
  border-right: 5px solid #eeeeee;
  border-left: 0;
  text-align: right;
}
.blockquote-reverse footer:before,
blockquote.pull-right footer:before,
.blockquote-reverse small:before,
blockquote.pull-right small:before,
.blockquote-reverse .small:before,
blockquote.pull-right .small:before {
  content: '';
}
.blockquote-reverse footer:after,
blockquote.pull-right footer:after,
.blockquote-reverse small:after,
blockquote.pull-right small:after,
.blockquote-reverse .small:after,
blockquote.pull-right .small:after {
  content: '\00A0 \2014';
}
address {
  margin-bottom: 18px;
  font-style: normal;
  line-height: 1.42857143;
}
code,
kbd,
pre,
samp {
  font-family: monospace;
}
code {
  padding: 2px 4px;
  font-size: 90%;
  color: #c7254e;
  background-color: #f9f2f4;
  border-radius: 2px;
}
kbd {
  padding: 2px 4px;
  font-size: 90%;
  color: #888;
  background-color: transparent;
  border-radius: 1px;
  box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.25);
}
kbd kbd {
  padding: 0;
  font-size: 100%;
  font-weight: bold;
  box-shadow: none;
}
pre {
  display: block;
  padding: 8.5px;
  margin: 0 0 9px;
  font-size: 12px;
  line-height: 1.42857143;
  word-break: break-all;
  word-wrap: break-word;
  color: #333333;
  background-color: #f5f5f5;
  border: 1px solid #ccc;
  border-radius: 2px;
}
pre code {
  padding: 0;
  font-size: inherit;
  color: inherit;
  white-space: pre-wrap;
  background-color: transparent;
  border-radius: 0;
}
.pre-scrollable {
  max-height: 340px;
  overflow-y: scroll;
}
.container {
  margin-right: auto;
  margin-left: auto;
  padding-left: 0px;
  padding-right: 0px;
}
@media (min-width: 768px) {
  .container {
    width: 768px;
  }
}
@media (min-width: 992px) {
  .container {
    width: 940px;
  }
}
@media (min-width: 1200px) {
  .container {
    width: 1140px;
  }
}
.container-fluid {
  margin-right: auto;
  margin-left: auto;
  padding-left: 0px;
  padding-right: 0px;
}
.row {
  margin-left: 0px;
  margin-right: 0px;
}
.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 {
  position: relative;
  min-height: 1px;
  padding-left: 0px;
  padding-right: 0px;
}
.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 {
  float: left;
}
.col-xs-12 {
  width: 100%;
}
.col-xs-11 {
  width: 91.66666667%;
}
.col-xs-10 {
  width: 83.33333333%;
}
.col-xs-9 {
  width: 75%;
}
.col-xs-8 {
  width: 66.66666667%;
}
.col-xs-7 {
  width: 58.33333333%;
}
.col-xs-6 {
  width: 50%;
}
.col-xs-5 {
  width: 41.66666667%;
}
.col-xs-4 {
  width: 33.33333333%;
}
.col-xs-3 {
  width: 25%;
}
.col-xs-2 {
  width: 16.66666667%;
}
.col-xs-1 {
  width: 8.33333333%;
}
.col-xs-pull-12 {
  right: 100%;
}
.col-xs-pull-11 {
  right: 91.66666667%;
}
.col-xs-pull-10 {
  right: 83.33333333%;
}
.col-xs-pull-9 {
  right: 75%;
}
.col-xs-pull-8 {
  right: 66.66666667%;
}
.col-xs-pull-7 {
  right: 58.33333333%;
}
.col-xs-pull-6 {
  right: 50%;
}
.col-xs-pull-5 {
  right: 41.66666667%;
}
.col-xs-pull-4 {
  right: 33.33333333%;
}
.col-xs-pull-3 {
  right: 25%;
}
.col-xs-pull-2 {
  right: 16.66666667%;
}
.col-xs-pull-1 {
  right: 8.33333333%;
}
.col-xs-pull-0 {
  right: auto;
}
.col-xs-push-12 {
  left: 100%;
}
.col-xs-push-11 {
  left: 91.66666667%;
}
.col-xs-push-10 {
  left: 83.33333333%;
}
.col-xs-push-9 {
  left: 75%;
}
.col-xs-push-8 {
  left: 66.66666667%;
}
.col-xs-push-7 {
  left: 58.33333333%;
}
.col-xs-push-6 {
  left: 50%;
}
.col-xs-push-5 {
  left: 41.66666667%;
}
.col-xs-push-4 {
  left: 33.33333333%;
}
.col-xs-push-3 {
  left: 25%;
}
.col-xs-push-2 {
  left: 16.66666667%;
}
.col-xs-push-1 {
  left: 8.33333333%;
}
.col-xs-push-0 {
  left: auto;
}
.col-xs-offset-12 {
  margin-left: 100%;
}
.col-xs-offset-11 {
  margin-left: 91.66666667%;
}
.col-xs-offset-10 {
  margin-left: 83.33333333%;
}
.col-xs-offset-9 {
  margin-left: 75%;
}
.col-xs-offset-8 {
  margin-left: 66.66666667%;
}
.col-xs-offset-7 {
  margin-left: 58.33333333%;
}
.col-xs-offset-6 {
  margin-left: 50%;
}
.col-xs-offset-5 {
  margin-left: 41.66666667%;
}
.col-xs-offset-4 {
  margin-left: 33.33333333%;
}
.col-xs-offset-3 {
  margin-left: 25%;
}
.col-xs-offset-2 {
  margin-left: 16.66666667%;
}
.col-xs-offset-1 {
  margin-left: 8.33333333%;
}
.col-xs-offset-0 {
  margin-left: 0%;
}
@media (min-width: 768px) {
  .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 {
    float: left;
  }
  .col-sm-12 {
    width: 100%;
  }
  .col-sm-11 {
    width: 91.66666667%;
  }
  .col-sm-10 {
    width: 83.33333333%;
  }
  .col-sm-9 {
    width: 75%;
  }
  .col-sm-8 {
    width: 66.66666667%;
  }
  .col-sm-7 {
    width: 58.33333333%;
  }
  .col-sm-6 {
    width: 50%;
  }
  .col-sm-5 {
    width: 41.66666667%;
  }
  .col-sm-4 {
    width: 33.33333333%;
  }
  .col-sm-3 {
    width: 25%;
  }
  .col-sm-2 {
    width: 16.66666667%;
  }
  .col-sm-1 {
    width: 8.33333333%;
  }
  .col-sm-pull-12 {
    right: 100%;
  }
  .col-sm-pull-11 {
    right: 91.66666667%;
  }
  .col-sm-pull-10 {
    right: 83.33333333%;
  }
  .col-sm-pull-9 {
    right: 75%;
  }
  .col-sm-pull-8 {
    right: 66.66666667%;
  }
  .col-sm-pull-7 {
    right: 58.33333333%;
  }
  .col-sm-pull-6 {
    right: 50%;
  }
  .col-sm-pull-5 {
    right: 41.66666667%;
  }
  .col-sm-pull-4 {
    right: 33.33333333%;
  }
  .col-sm-pull-3 {
    right: 25%;
  }
  .col-sm-pull-2 {
    right: 16.66666667%;
  }
  .col-sm-pull-1 {
    right: 8.33333333%;
  }
  .col-sm-pull-0 {
    right: auto;
  }
  .col-sm-push-12 {
    left: 100%;
  }
  .col-sm-push-11 {
    left: 91.66666667%;
  }
  .col-sm-push-10 {
    left: 83.33333333%;
  }
  .col-sm-push-9 {
    left: 75%;
  }
  .col-sm-push-8 {
    left: 66.66666667%;
  }
  .col-sm-push-7 {
    left: 58.33333333%;
  }
  .col-sm-push-6 {
    left: 50%;
  }
  .col-sm-push-5 {
    left: 41.66666667%;
  }
  .col-sm-push-4 {
    left: 33.33333333%;
  }
  .col-sm-push-3 {
    left: 25%;
  }
  .col-sm-push-2 {
    left: 16.66666667%;
  }
  .col-sm-push-1 {
    left: 8.33333333%;
  }
  .col-sm-push-0 {
    left: auto;
  }
  .col-sm-offset-12 {
    margin-left: 100%;
  }
  .col-sm-offset-11 {
    margin-left: 91.66666667%;
  }
  .col-sm-offset-10 {
    margin-left: 83.33333333%;
  }
  .col-sm-offset-9 {
    margin-left: 75%;
  }
  .col-sm-offset-8 {
    margin-left: 66.66666667%;
  }
  .col-sm-offset-7 {
    margin-left: 58.33333333%;
  }
  .col-sm-offset-6 {
    margin-left: 50%;
  }
  .col-sm-offset-5 {
    margin-left: 41.66666667%;
  }
  .col-sm-offset-4 {
    margin-left: 33.33333333%;
  }
  .col-sm-offset-3 {
    margin-left: 25%;
  }
  .col-sm-offset-2 {
    margin-left: 16.66666667%;
  }
  .col-sm-offset-1 {
    margin-left: 8.33333333%;
  }
  .col-sm-offset-0 {
    margin-left: 0%;
  }
}
@media (min-width: 992px) {
  .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 {
    float: left;
  }
  .col-md-12 {
    width: 100%;
  }
  .col-md-11 {
    width: 91.66666667%;
  }
  .col-md-10 {
    width: 83.33333333%;
  }
  .col-md-9 {
    width: 75%;
  }
  .col-md-8 {
    width: 66.66666667%;
  }
  .col-md-7 {
    width: 58.33333333%;
  }
  .col-md-6 {
    width: 50%;
  }
  .col-md-5 {
    width: 41.66666667%;
  }
  .col-md-4 {
    width: 33.33333333%;
  }
  .col-md-3 {
    width: 25%;
  }
  .col-md-2 {
    width: 16.66666667%;
  }
  .col-md-1 {
    width: 8.33333333%;
  }
  .col-md-pull-12 {
    right: 100%;
  }
  .col-md-pull-11 {
    right: 91.66666667%;
  }
  .col-md-pull-10 {
    right: 83.33333333%;
  }
  .col-md-pull-9 {
    right: 75%;
  }
  .col-md-pull-8 {
    right: 66.66666667%;
  }
  .col-md-pull-7 {
    right: 58.33333333%;
  }
  .col-md-pull-6 {
    right: 50%;
  }
  .col-md-pull-5 {
    right: 41.66666667%;
  }
  .col-md-pull-4 {
    right: 33.33333333%;
  }
  .col-md-pull-3 {
    right: 25%;
  }
  .col-md-pull-2 {
    right: 16.66666667%;
  }
  .col-md-pull-1 {
    right: 8.33333333%;
  }
  .col-md-pull-0 {
    right: auto;
  }
  .col-md-push-12 {
    left: 100%;
  }
  .col-md-push-11 {
    left: 91.66666667%;
  }
  .col-md-push-10 {
    left: 83.33333333%;
  }
  .col-md-push-9 {
    left: 75%;
  }
  .col-md-push-8 {
    left: 66.66666667%;
  }
  .col-md-push-7 {
    left: 58.33333333%;
  }
  .col-md-push-6 {
    left: 50%;
  }
  .col-md-push-5 {
    left: 41.66666667%;
  }
  .col-md-push-4 {
    left: 33.33333333%;
  }
  .col-md-push-3 {
    left: 25%;
  }
  .col-md-push-2 {
    left: 16.66666667%;
  }
  .col-md-push-1 {
    left: 8.33333333%;
  }
  .col-md-push-0 {
    left: auto;
  }
  .col-md-offset-12 {
    margin-left: 100%;
  }
  .col-md-offset-11 {
    margin-left: 91.66666667%;
  }
  .col-md-offset-10 {
    margin-left: 83.33333333%;
  }
  .col-md-offset-9 {
    margin-left: 75%;
  }
  .col-md-offset-8 {
    margin-left: 66.66666667%;
  }
  .col-md-offset-7 {
    margin-left: 58.33333333%;
  }
  .col-md-offset-6 {
    margin-left: 50%;
  }
  .col-md-offset-5 {
    margin-left: 41.66666667%;
  }
  .col-md-offset-4 {
    margin-left: 33.33333333%;
  }
  .col-md-offset-3 {
    margin-left: 25%;
  }
  .col-md-offset-2 {
    margin-left: 16.66666667%;
  }
  .col-md-offset-1 {
    margin-left: 8.33333333%;
  }
  .col-md-offset-0 {
    margin-left: 0%;
  }
}
@media (min-width: 1200px) {
  .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 {
    float: left;
  }
  .col-lg-12 {
    width: 100%;
  }
  .col-lg-11 {
    width: 91.66666667%;
  }
  .col-lg-10 {
    width: 83.33333333%;
  }
  .col-lg-9 {
    width: 75%;
  }
  .col-lg-8 {
    width: 66.66666667%;
  }
  .col-lg-7 {
    width: 58.33333333%;
  }
  .col-lg-6 {
    width: 50%;
  }
  .col-lg-5 {
    width: 41.66666667%;
  }
  .col-lg-4 {
    width: 33.33333333%;
  }
  .col-lg-3 {
    width: 25%;
  }
  .col-lg-2 {
    width: 16.66666667%;
  }
  .col-lg-1 {
    width: 8.33333333%;
  }
  .col-lg-pull-12 {
    right: 100%;
  }
  .col-lg-pull-11 {
    right: 91.66666667%;
  }
  .col-lg-pull-10 {
    right: 83.33333333%;
  }
  .col-lg-pull-9 {
    right: 75%;
  }
  .col-lg-pull-8 {
    right: 66.66666667%;
  }
  .col-lg-pull-7 {
    right: 58.33333333%;
  }
  .col-lg-pull-6 {
    right: 50%;
  }
  .col-lg-pull-5 {
    right: 41.66666667%;
  }
  .col-lg-pull-4 {
    right: 33.33333333%;
  }
  .col-lg-pull-3 {
    right: 25%;
  }
  .col-lg-pull-2 {
    right: 16.66666667%;
  }
  .col-lg-pull-1 {
    right: 8.33333333%;
  }
  .col-lg-pull-0 {
    right: auto;
  }
  .col-lg-push-12 {
    left: 100%;
  }
  .col-lg-push-11 {
    left: 91.66666667%;
  }
  .col-lg-push-10 {
    left: 83.33333333%;
  }
  .col-lg-push-9 {
    left: 75%;
  }
  .col-lg-push-8 {
    left: 66.66666667%;
  }
  .col-lg-push-7 {
    left: 58.33333333%;
  }
  .col-lg-push-6 {
    left: 50%;
  }
  .col-lg-push-5 {
    left: 41.66666667%;
  }
  .col-lg-push-4 {
    left: 33.33333333%;
  }
  .col-lg-push-3 {
    left: 25%;
  }
  .col-lg-push-2 {
    left: 16.66666667%;
  }
  .col-lg-push-1 {
    left: 8.33333333%;
  }
  .col-lg-push-0 {
    left: auto;
  }
  .col-lg-offset-12 {
    margin-left: 100%;
  }
  .col-lg-offset-11 {
    margin-left: 91.66666667%;
  }
  .col-lg-offset-10 {
    margin-left: 83.33333333%;
  }
  .col-lg-offset-9 {
    margin-left: 75%;
  }
  .col-lg-offset-8 {
    margin-left: 66.66666667%;
  }
  .col-lg-offset-7 {
    margin-left: 58.33333333%;
  }
  .col-lg-offset-6 {
    margin-left: 50%;
  }
  .col-lg-offset-5 {
    margin-left: 41.66666667%;
  }
  .col-lg-offset-4 {
    margin-left: 33.33333333%;
  }
  .col-lg-offset-3 {
    margin-left: 25%;
  }
  .col-lg-offset-2 {
    margin-left: 16.66666667%;
  }
  .col-lg-offset-1 {
    margin-left: 8.33333333%;
  }
  .col-lg-offset-0 {
    margin-left: 0%;
  }
}
table {
  background-color: transparent;
}
caption {
  padding-top: 8px;
  padding-bottom: 8px;
  color: #777777;
  text-align: left;
}
th {
  text-align: left;
}
.table {
  width: 100%;
  max-width: 100%;
  margin-bottom: 18px;
}
.table > thead > tr > th,
.table > tbody > tr > th,
.table > tfoot > tr > th,
.table > thead > tr > td,
.table > tbody > tr > td,
.table > tfoot > tr > td {
  padding: 8px;
  line-height: 1.42857143;
  vertical-align: top;
  border-top: 1px solid #ddd;
}
.table > thead > tr > th {
  vertical-align: bottom;
  border-bottom: 2px solid #ddd;
}
.table > caption + thead > tr:first-child > th,
.table > colgroup + thead > tr:first-child > th,
.table > thead:first-child > tr:first-child > th,
.table > caption + thead > tr:first-child > td,
.table > colgroup + thead > tr:first-child > td,
.table > thead:first-child > tr:first-child > td {
  border-top: 0;
}
.table > tbody + tbody {
  border-top: 2px solid #ddd;
}
.table .table {
  background-color: #fff;
}
.table-condensed > thead > tr > th,
.table-condensed > tbody > tr > th,
.table-condensed > tfoot > tr > th,
.table-condensed > thead > tr > td,
.table-condensed > tbody > tr > td,
.table-condensed > tfoot > tr > td {
  padding: 5px;
}
.table-bordered {
  border: 1px solid #ddd;
}
.table-bordered > thead > tr > th,
.table-bordered > tbody > tr > th,
.table-bordered > tfoot > tr > th,
.table-bordered > thead > tr > td,
.table-bordered > tbody > tr > td,
.table-bordered > tfoot > tr > td {
  border: 1px solid #ddd;
}
.table-bordered > thead > tr > th,
.table-bordered > thead > tr > td {
  border-bottom-width: 2px;
}
.table-striped > tbody > tr:nth-of-type(odd) {
  background-color: #f9f9f9;
}
.table-hover > tbody > tr:hover {
  background-color: #f5f5f5;
}
table col[class*="col-"] {
  position: static;
  float: none;
  display: table-column;
}
table td[class*="col-"],
table th[class*="col-"] {
  position: static;
  float: none;
  display: table-cell;
}
.table > thead > tr > td.active,
.table > tbody > tr > td.active,
.table > tfoot > tr > td.active,
.table > thead > tr > th.active,
.table > tbody > tr > th.active,
.table > tfoot > tr > th.active,
.table > thead > tr.active > td,
.table > tbody > tr.active > td,
.table > tfoot > tr.active > td,
.table > thead > tr.active > th,
.table > tbody > tr.active > th,
.table > tfoot > tr.active > th {
  background-color: #f5f5f5;
}
.table-hover > tbody > tr > td.active:hover,
.table-hover > tbody > tr > th.active:hover,
.table-hover > tbody > tr.active:hover > td,
.table-hover > tbody > tr:hover > .active,
.table-hover > tbody > tr.active:hover > th {
  background-color: #e8e8e8;
}
.table > thead > tr > td.success,
.table > tbody > tr > td.success,
.table > tfoot > tr > td.success,
.table > thead > tr > th.success,
.table > tbody > tr > th.success,
.table > tfoot > tr > th.success,
.table > thead > tr.success > td,
.table > tbody > tr.success > td,
.table > tfoot > tr.success > td,
.table > thead > tr.success > th,
.table > tbody > tr.success > th,
.table > tfoot > tr.success > th {
  background-color: #dff0d8;
}
.table-hover > tbody > tr > td.success:hover,
.table-hover > tbody > tr > th.success:hover,
.table-hover > tbody > tr.success:hover > td,
.table-hover > tbody > tr:hover > .success,
.table-hover > tbody > tr.success:hover > th {
  background-color: #d0e9c6;
}
.table > thead > tr > td.info,
.table > tbody > tr > td.info,
.table > tfoot > tr > td.info,
.table > thead > tr > th.info,
.table > tbody > tr > th.info,
.table > tfoot > tr > th.info,
.table > thead > tr.info > td,
.table > tbody > tr.info > td,
.table > tfoot > tr.info > td,
.table > thead > tr.info > th,
.table > tbody > tr.info > th,
.table > tfoot > tr.info > th {
  background-color: #d9edf7;
}
.table-hover > tbody > tr > td.info:hover,
.table-hover > tbody > tr > th.info:hover,
.table-hover > tbody > tr.info:hover > td,
.table-hover > tbody > tr:hover > .info,
.table-hover > tbody > tr.info:hover > th {
  background-color: #c4e3f3;
}
.table > thead > tr > td.warning,
.table > tbody > tr > td.warning,
.table > tfoot > tr > td.warning,
.table > thead > tr > th.warning,
.table > tbody > tr > th.warning,
.table > tfoot > tr > th.warning,
.table > thead > tr.warning > td,
.table > tbody > tr.warning > td,
.table > tfoot > tr.warning > td,
.table > thead > tr.warning > th,
.table > tbody > tr.warning > th,
.table > tfoot > tr.warning > th {
  background-color: #fcf8e3;
}
.table-hover > tbody > tr > td.warning:hover,
.table-hover > tbody > tr > th.warning:hover,
.table-hover > tbody > tr.warning:hover > td,
.table-hover > tbody > tr:hover > .warning,
.table-hover > tbody > tr.warning:hover > th {
  background-color: #faf2cc;
}
.table > thead > tr > td.danger,
.table > tbody > tr > td.danger,
.table > tfoot > tr > td.danger,
.table > thead > tr > th.danger,
.table > tbody > tr > th.danger,
.table > tfoot > tr > th.danger,
.table > thead > tr.danger > td,
.table > tbody > tr.danger > td,
.table > tfoot > tr.danger > td,
.table > thead > tr.danger > th,
.table > tbody > tr.danger > th,
.table > tfoot > tr.danger > th {
  background-color: #f2dede;
}
.table-hover > tbody > tr > td.danger:hover,
.table-hover > tbody > tr > th.danger:hover,
.table-hover > tbody > tr.danger:hover > td,
.table-hover > tbody > tr:hover > .danger,
.table-hover > tbody > tr.danger:hover > th {
  background-color: #ebcccc;
}
.table-responsive {
  overflow-x: auto;
  min-height: 0.01%;
}
@media screen and (max-width: 767px) {
  .table-responsive {
    width: 100%;
    margin-bottom: 13.5px;
    overflow-y: hidden;
    -ms-overflow-style: -ms-autohiding-scrollbar;
    border: 1px solid #ddd;
  }
  .table-responsive > .table {
    margin-bottom: 0;
  }
  .table-responsive > .table > thead > tr > th,
  .table-responsive > .table > tbody > tr > th,
  .table-responsive > .table > tfoot > tr > th,
  .table-responsive > .table > thead > tr > td,
  .table-responsive > .table > tbody > tr > td,
  .table-responsive > .table > tfoot > tr > td {
    white-space: nowrap;
  }
  .table-responsive > .table-bordered {
    border: 0;
  }
  .table-responsive > .table-bordered > thead > tr > th:first-child,
  .table-responsive > .table-bordered > tbody > tr > th:first-child,
  .table-responsive > .table-bordered > tfoot > tr > th:first-child,
  .table-responsive > .table-bordered > thead > tr > td:first-child,
  .table-responsive > .table-bordered > tbody > tr > td:first-child,
  .table-responsive > .table-bordered > tfoot > tr > td:first-child {
    border-left: 0;
  }
  .table-responsive > .table-bordered > thead > tr > th:last-child,
  .table-responsive > .table-bordered > tbody > tr > th:last-child,
  .table-responsive > .table-bordered > tfoot > tr > th:last-child,
  .table-responsive > .table-bordered > thead > tr > td:last-child,
  .table-responsive > .table-bordered > tbody > tr > td:last-child,
  .table-responsive > .table-bordered > tfoot > tr > td:last-child {
    border-right: 0;
  }
  .table-responsive > .table-bordered > tbody > tr:last-child > th,
  .table-responsive > .table-bordered > tfoot > tr:last-child > th,
  .table-responsive > .table-bordered > tbody > tr:last-child > td,
  .table-responsive > .table-bordered > tfoot > tr:last-child > td {
    border-bottom: 0;
  }
}
fieldset {
  padding: 0;
  margin: 0;
  border: 0;
  min-width: 0;
}
legend {
  display: block;
  width: 100%;
  padding: 0;
  margin-bottom: 18px;
  font-size: 19.5px;
  line-height: inherit;
  color: #333333;
  border: 0;
  border-bottom: 1px solid #e5e5e5;
}
label {
  display: inline-block;
  max-width: 100%;
  margin-bottom: 5px;
  font-weight: bold;
}
input[type="search"] {
  -webkit-box-sizing: border-box;
  -moz-box-sizing: border-box;
  box-sizing: border-box;
}
input[type="radio"],
input[type="checkbox"] {
  margin: 4px 0 0;
  margin-top: 1px \9;
  line-height: normal;
}
input[type="file"] {
  display: block;
}
input[type="range"] {
  display: block;
  width: 100%;
}
select[multiple],
select[size] {
  height: auto;
}
input[type="file"]:focus,
input[type="radio"]:focus,
input[type="checkbox"]:focus {
  outline: 5px auto -webkit-focus-ring-color;
  outline-offset: -2px;
}
output {
  display: block;
  padding-top: 7px;
  font-size: 13px;
  line-height: 1.42857143;
  color: #555555;
}
.form-control {
  display: block;
  width: 100%;
  height: 32px;
  padding: 6px 12px;
  font-size: 13px;
  line-height: 1.42857143;
  color: #555555;
  background-color: #fff;
  background-image: none;
  border: 1px solid #ccc;
  border-radius: 2px;
  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
  -webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
  -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
  transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
}
.form-control:focus {
  border-color: #66afe9;
  outline: 0;
  -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);
  box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);
}
.form-control::-moz-placeholder {
  color: #999;
  opacity: 1;
}
.form-control:-ms-input-placeholder {
  color: #999;
}
.form-control::-webkit-input-placeholder {
  color: #999;
}
.form-control::-ms-expand {
  border: 0;
  background-color: transparent;
}
.form-control[disabled],
.form-control[readonly],
fieldset[disabled] .form-control {
  background-color: #eeeeee;
  opacity: 1;
}
.form-control[disabled],
fieldset[disabled] .form-control {
  cursor: not-allowed;
}
textarea.form-control {
  height: auto;
}
input[type="search"] {
  -webkit-appearance: none;
}
@media screen and (-webkit-min-device-pixel-ratio: 0) {
  input[type="date"].form-control,
  input[type="time"].form-control,
  input[type="datetime-local"].form-control,
  input[type="month"].form-control {
    line-height: 32px;
  }
  input[type="date"].input-sm,
  input[type="time"].input-sm,
  input[type="datetime-local"].input-sm,
  input[type="month"].input-sm,
  .input-group-sm input[type="date"],
  .input-group-sm input[type="time"],
  .input-group-sm input[type="datetime-local"],
  .input-group-sm input[type="month"] {
    line-height: 30px;
  }
  input[type="date"].input-lg,
  input[type="time"].input-lg,
  input[type="datetime-local"].input-lg,
  input[type="month"].input-lg,
  .input-group-lg input[type="date"],
  .input-group-lg input[type="time"],
  .input-group-lg input[type="datetime-local"],
  .input-group-lg input[type="month"] {
    line-height: 45px;
  }
}
.form-group {
  margin-bottom: 15px;
}
.radio,
.checkbox {
  position: relative;
  display: block;
  margin-top: 10px;
  margin-bottom: 10px;
}
.radio label,
.checkbox label {
  min-height: 18px;
  padding-left: 20px;
  margin-bottom: 0;
  font-weight: normal;
  cursor: pointer;
}
.radio input[type="radio"],
.radio-inline input[type="radio"],
.checkbox input[type="checkbox"],
.checkbox-inline input[type="checkbox"] {
  position: absolute;
  margin-left: -20px;
  margin-top: 4px \9;
}
.radio + .radio,
.checkbox + .checkbox {
  margin-top: -5px;
}
.radio-inline,
.checkbox-inline {
  position: relative;
  display: inline-block;
  padding-left: 20px;
  margin-bottom: 0;
  vertical-align: middle;
  font-weight: normal;
  cursor: pointer;
}
.radio-inline + .radio-inline,
.checkbox-inline + .checkbox-inline {
  margin-top: 0;
  margin-left: 10px;
}
input[type="radio"][disabled],
input[type="checkbox"][disabled],
input[type="radio"].disabled,
input[type="checkbox"].disabled,
fieldset[disabled] input[type="radio"],
fieldset[disabled] input[type="checkbox"] {
  cursor: not-allowed;
}
.radio-inline.disabled,
.checkbox-inline.disabled,
fieldset[disabled] .radio-inline,
fieldset[disabled] .checkbox-inline {
  cursor: not-allowed;
}
.radio.disabled label,
.checkbox.disabled label,
fieldset[disabled] .radio label,
fieldset[disabled] .checkbox label {
  cursor: not-allowed;
}
.form-control-static {
  padding-top: 7px;
  padding-bottom: 7px;
  margin-bottom: 0;
  min-height: 31px;
}
.form-control-static.input-lg,
.form-control-static.input-sm {
  padding-left: 0;
  padding-right: 0;
}
.input-sm {
  height: 30px;
  padding: 5px 10px;
  font-size: 12px;
  line-height: 1.5;
  border-radius: 1px;
}
select.input-sm {
  height: 30px;
  line-height: 30px;
}
textarea.input-sm,
select[multiple].input-sm {
  height: auto;
}
.form-group-sm .form-control {
  height: 30px;
  padding: 5px 10px;
  font-size: 12px;
  line-height: 1.5;
  border-radius: 1px;
}
.form-group-sm select.form-control {
  height: 30px;
  line-height: 30px;
}
.form-group-sm textarea.form-control,
.form-group-sm select[multiple].form-control {
  height: auto;
}
.form-group-sm .form-control-static {
  height: 30px;
  min-height: 30px;
  padding: 6px 10px;
  font-size: 12px;
  line-height: 1.5;
}
.input-lg {
  height: 45px;
  padding: 10px 16px;
  font-size: 17px;
  line-height: 1.3333333;
  border-radius: 3px;
}
select.input-lg {
  height: 45px;
  line-height: 45px;
}
textarea.input-lg,
select[multiple].input-lg {
  height: auto;
}
.form-group-lg .form-control {
  height: 45px;
  padding: 10px 16px;
  font-size: 17px;
  line-height: 1.3333333;
  border-radius: 3px;
}
.form-group-lg select.form-control {
  height: 45px;
  line-height: 45px;
}
.form-group-lg textarea.form-control,
.form-group-lg select[multiple].form-control {
  height: auto;
}
.form-group-lg .form-control-static {
  height: 45px;
  min-height: 35px;
  padding: 11px 16px;
  font-size: 17px;
  line-height: 1.3333333;
}
.has-feedback {
  position: relative;
}
.has-feedback .form-control {
  padding-right: 40px;
}
.form-control-feedback {
  position: absolute;
  top: 0;
  right: 0;
  z-index: 2;
  display: block;
  width: 32px;
  height: 32px;
  line-height: 32px;
  text-align: center;
  pointer-events: none;
}
.input-lg + .form-control-feedback,
.input-group-lg + .form-control-feedback,
.form-group-lg .form-control + .form-control-feedback {
  width: 45px;
  height: 45px;
  line-height: 45px;
}
.input-sm + .form-control-feedback,
.input-group-sm + .form-control-feedback,
.form-group-sm .form-control + .form-control-feedback {
  width: 30px;
  height: 30px;
  line-height: 30px;
}
.has-success .help-block,
.has-success .control-label,
.has-success .radio,
.has-success .checkbox,
.has-success .radio-inline,
.has-success .checkbox-inline,
.has-success.radio label,
.has-success.checkbox label,
.has-success.radio-inline label,
.has-success.checkbox-inline label {
  color: #3c763d;
}
.has-success .form-control {
  border-color: #3c763d;
  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
}
.has-success .form-control:focus {
  border-color: #2b542c;
  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168;
  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168;
}
.has-success .input-group-addon {
  color: #3c763d;
  border-color: #3c763d;
  background-color: #dff0d8;
}
.has-success .form-control-feedback {
  color: #3c763d;
}
.has-warning .help-block,
.has-warning .control-label,
.has-warning .radio,
.has-warning .checkbox,
.has-warning .radio-inline,
.has-warning .checkbox-inline,
.has-warning.radio label,
.has-warning.checkbox label,
.has-warning.radio-inline label,
.has-warning.checkbox-inline label {
  color: #8a6d3b;
}
.has-warning .form-control {
  border-color: #8a6d3b;
  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
}
.has-warning .form-control:focus {
  border-color: #66512c;
  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b;
  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b;
}
.has-warning .input-group-addon {
  color: #8a6d3b;
  border-color: #8a6d3b;
  background-color: #fcf8e3;
}
.has-warning .form-control-feedback {
  color: #8a6d3b;
}
.has-error .help-block,
.has-error .control-label,
.has-error .radio,
.has-error .checkbox,
.has-error .radio-inline,
.has-error .checkbox-inline,
.has-error.radio label,
.has-error.checkbox label,
.has-error.radio-inline label,
.has-error.checkbox-inline label {
  color: #a94442;
}
.has-error .form-control {
  border-color: #a94442;
  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
}
.has-error .form-control:focus {
  border-color: #843534;
  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483;
  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483;
}
.has-error .input-group-addon {
  color: #a94442;
  border-color: #a94442;
  background-color: #f2dede;
}
.has-error .form-control-feedback {
  color: #a94442;
}
.has-feedback label ~ .form-control-feedback {
  top: 23px;
}
.has-feedback label.sr-only ~ .form-control-feedback {
  top: 0;
}
.help-block {
  display: block;
  margin-top: 5px;
  margin-bottom: 10px;
  color: #404040;
}
@media (min-width: 768px) {
  .form-inline .form-group {
    display: inline-block;
    margin-bottom: 0;
    vertical-align: middle;
  }
  .form-inline .form-control {
    display: inline-block;
    width: auto;
    vertical-align: middle;
  }
  .form-inline .form-control-static {
    display: inline-block;
  }
  .form-inline .input-group {
    display: inline-table;
    vertical-align: middle;
  }
  .form-inline .input-group .input-group-addon,
  .form-inline .input-group .input-group-btn,
  .form-inline .input-group .form-control {
    width: auto;
  }
  .form-inline .input-group > .form-control {
    width: 100%;
  }
  .form-inline .control-label {
    margin-bottom: 0;
    vertical-align: middle;
  }
  .form-inline .radio,
  .form-inline .checkbox {
    display: inline-block;
    margin-top: 0;
    margin-bottom: 0;
    vertical-align: middle;
  }
  .form-inline .radio label,
  .form-inline .checkbox label {
    padding-left: 0;
  }
  .form-inline .radio input[type="radio"],
  .form-inline .checkbox input[type="checkbox"] {
    position: relative;
    margin-left: 0;
  }
  .form-inline .has-feedback .form-control-feedback {
    top: 0;
  }
}
.form-horizontal .radio,
.form-horizontal .checkbox,
.form-horizontal .radio-inline,
.form-horizontal .checkbox-inline {
  margin-top: 0;
  margin-bottom: 0;
  padding-top: 7px;
}
.form-horizontal .radio,
.form-horizontal .checkbox {
  min-height: 25px;
}
.form-horizontal .form-group {
  margin-left: 0px;
  margin-right: 0px;
}
@media (min-width: 768px) {
  .form-horizontal .control-label {
    text-align: right;
    margin-bottom: 0;
    padding-top: 7px;
  }
}
.form-horizontal .has-feedback .form-control-feedback {
  right: 0px;
}
@media (min-width: 768px) {
  .form-horizontal .form-group-lg .control-label {
    padding-top: 11px;
    font-size: 17px;
  }
}
@media (min-width: 768px) {
  .form-horizontal .form-group-sm .control-label {
    padding-top: 6px;
    font-size: 12px;
  }
}
.btn {
  display: inline-block;
  margin-bottom: 0;
  font-weight: normal;
  text-align: center;
  vertical-align: middle;
  touch-action: manipulation;
  cursor: pointer;
  background-image: none;
  border: 1px solid transparent;
  white-space: nowrap;
  padding: 6px 12px;
  font-size: 13px;
  line-height: 1.42857143;
  border-radius: 2px;
  -webkit-user-select: none;
  -moz-user-select: none;
  -ms-user-select: none;
  user-select: none;
}
.btn:focus,
.btn:active:focus,
.btn.active:focus,
.btn.focus,
.btn:active.focus,
.btn.active.focus {
  outline: 5px auto -webkit-focus-ring-color;
  outline-offset: -2px;
}
.btn:hover,
.btn:focus,
.btn.focus {
  color: #333;
  text-decoration: none;
}
.btn:active,
.btn.active {
  outline: 0;
  background-image: none;
  -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
  box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
}
.btn.disabled,
.btn[disabled],
fieldset[disabled] .btn {
  cursor: not-allowed;
  opacity: 0.65;
  filter: alpha(opacity=65);
  -webkit-box-shadow: none;
  box-shadow: none;
}
a.btn.disabled,
fieldset[disabled] a.btn {
  pointer-events: none;
}
.btn-default {
  color: #333;
  background-color: #fff;
  border-color: #ccc;
}
.btn-default:focus,
.btn-default.focus {
  color: #333;
  background-color: #e6e6e6;
  border-color: #8c8c8c;
}
.btn-default:hover {
  color: #333;
  background-color: #e6e6e6;
  border-color: #adadad;
}
.btn-default:active,
.btn-default.active,
.open > .dropdown-toggle.btn-default {
  color: #333;
  background-color: #e6e6e6;
  border-color: #adadad;
}
.btn-default:active:hover,
.btn-default.active:hover,
.open > .dropdown-toggle.btn-default:hover,
.btn-default:active:focus,
.btn-default.active:focus,
.open > .dropdown-toggle.btn-default:focus,
.btn-default:active.focus,
.btn-default.active.focus,
.open > .dropdown-toggle.btn-default.focus {
  color: #333;
  background-color: #d4d4d4;
  border-color: #8c8c8c;
}
.btn-default:active,
.btn-default.active,
.open > .dropdown-toggle.btn-default {
  background-image: none;
}
.btn-default.disabled:hover,
.btn-default[disabled]:hover,
fieldset[disabled] .btn-default:hover,
.btn-default.disabled:focus,
.btn-default[disabled]:focus,
fieldset[disabled] .btn-default:focus,
.btn-default.disabled.focus,
.btn-default[disabled].focus,
fieldset[disabled] .btn-default.focus {
  background-color: #fff;
  border-color: #ccc;
}
.btn-default .badge {
  color: #fff;
  background-color: #333;
}
.btn-primary {
  color: #fff;
  background-color: #337ab7;
  border-color: #2e6da4;
}
.btn-primary:focus,
.btn-primary.focus {
  color: #fff;
  background-color: #286090;
  border-color: #122b40;
}
.btn-primary:hover {
  color: #fff;
  background-color: #286090;
  border-color: #204d74;
}
.btn-primary:active,
.btn-primary.active,
.open > .dropdown-toggle.btn-primary {
  color: #fff;
  background-color: #286090;
  border-color: #204d74;
}
.btn-primary:active:hover,
.btn-primary.active:hover,
.open > .dropdown-toggle.btn-primary:hover,
.btn-primary:active:focus,
.btn-primary.active:focus,
.open > .dropdown-toggle.btn-primary:focus,
.btn-primary:active.focus,
.btn-primary.active.focus,
.open > .dropdown-toggle.btn-primary.focus {
  color: #fff;
  background-color: #204d74;
  border-color: #122b40;
}
.btn-primary:active,
.btn-primary.active,
.open > .dropdown-toggle.btn-primary {
  background-image: none;
}
.btn-primary.disabled:hover,
.btn-primary[disabled]:hover,
fieldset[disabled] .btn-primary:hover,
.btn-primary.disabled:focus,
.btn-primary[disabled]:focus,
fieldset[disabled] .btn-primary:focus,
.btn-primary.disabled.focus,
.btn-primary[disabled].focus,
fieldset[disabled] .btn-primary.focus {
  background-color: #337ab7;
  border-color: #2e6da4;
}
.btn-primary .badge {
  color: #337ab7;
  background-color: #fff;
}
.btn-success {
  color: #fff;
  background-color: #5cb85c;
  border-color: #4cae4c;
}
.btn-success:focus,
.btn-success.focus {
  color: #fff;
  background-color: #449d44;
  border-color: #255625;
}
.btn-success:hover {
  color: #fff;
  background-color: #449d44;
  border-color: #398439;
}
.btn-success:active,
.btn-success.active,
.open > .dropdown-toggle.btn-success {
  color: #fff;
  background-color: #449d44;
  border-color: #398439;
}
.btn-success:active:hover,
.btn-success.active:hover,
.open > .dropdown-toggle.btn-success:hover,
.btn-success:active:focus,
.btn-success.active:focus,
.open > .dropdown-toggle.btn-success:focus,
.btn-success:active.focus,
.btn-success.active.focus,
.open > .dropdown-toggle.btn-success.focus {
  color: #fff;
  background-color: #398439;
  border-color: #255625;
}
.btn-success:active,
.btn-success.active,
.open > .dropdown-toggle.btn-success {
  background-image: none;
}
.btn-success.disabled:hover,
.btn-success[disabled]:hover,
fieldset[disabled] .btn-success:hover,
.btn-success.disabled:focus,
.btn-success[disabled]:focus,
fieldset[disabled] .btn-success:focus,
.btn-success.disabled.focus,
.btn-success[disabled].focus,
fieldset[disabled] .btn-success.focus {
  background-color: #5cb85c;
  border-color: #4cae4c;
}
.btn-success .badge {
  color: #5cb85c;
  background-color: #fff;
}
.btn-info {
  color: #fff;
  background-color: #5bc0de;
  border-color: #46b8da;
}
.btn-info:focus,
.btn-info.focus {
  color: #fff;
  background-color: #31b0d5;
  border-color: #1b6d85;
}
.btn-info:hover {
  color: #fff;
  background-color: #31b0d5;
  border-color: #269abc;
}
.btn-info:active,
.btn-info.active,
.open > .dropdown-toggle.btn-info {
  color: #fff;
  background-color: #31b0d5;
  border-color: #269abc;
}
.btn-info:active:hover,
.btn-info.active:hover,
.open > .dropdown-toggle.btn-info:hover,
.btn-info:active:focus,
.btn-info.active:focus,
.open > .dropdown-toggle.btn-info:focus,
.btn-info:active.focus,
.btn-info.active.focus,
.open > .dropdown-toggle.btn-info.focus {
  color: #fff;
  background-color: #269abc;
  border-color: #1b6d85;
}
.btn-info:active,
.btn-info.active,
.open > .dropdown-toggle.btn-info {
  background-image: none;
}
.btn-info.disabled:hover,
.btn-info[disabled]:hover,
fieldset[disabled] .btn-info:hover,
.btn-info.disabled:focus,
.btn-info[disabled]:focus,
fieldset[disabled] .btn-info:focus,
.btn-info.disabled.focus,
.btn-info[disabled].focus,
fieldset[disabled] .btn-info.focus {
  background-color: #5bc0de;
  border-color: #46b8da;
}
.btn-info .badge {
  color: #5bc0de;
  background-color: #fff;
}
.btn-warning {
  color: #fff;
  background-color: #f0ad4e;
  border-color: #eea236;
}
.btn-warning:focus,
.btn-warning.focus {
  color: #fff;
  background-color: #ec971f;
  border-color: #985f0d;
}
.btn-warning:hover {
  color: #fff;
  background-color: #ec971f;
  border-color: #d58512;
}
.btn-warning:active,
.btn-warning.active,
.open > .dropdown-toggle.btn-warning {
  color: #fff;
  background-color: #ec971f;
  border-color: #d58512;
}
.btn-warning:active:hover,
.btn-warning.active:hover,
.open > .dropdown-toggle.btn-warning:hover,
.btn-warning:active:focus,
.btn-warning.active:focus,
.open > .dropdown-toggle.btn-warning:focus,
.btn-warning:active.focus,
.btn-warning.active.focus,
.open > .dropdown-toggle.btn-warning.focus {
  color: #fff;
  background-color: #d58512;
  border-color: #985f0d;
}
.btn-warning:active,
.btn-warning.active,
.open > .dropdown-toggle.btn-warning {
  background-image: none;
}
.btn-warning.disabled:hover,
.btn-warning[disabled]:hover,
fieldset[disabled] .btn-warning:hover,
.btn-warning.disabled:focus,
.btn-warning[disabled]:focus,
fieldset[disabled] .btn-warning:focus,
.btn-warning.disabled.focus,
.btn-warning[disabled].focus,
fieldset[disabled] .btn-warning.focus {
  background-color: #f0ad4e;
  border-color: #eea236;
}
.btn-warning .badge {
  color: #f0ad4e;
  background-color: #fff;
}
.btn-danger {
  color: #fff;
  background-color: #d9534f;
  border-color: #d43f3a;
}
.btn-danger:focus,
.btn-danger.focus {
  color: #fff;
  background-color: #c9302c;
  border-color: #761c19;
}
.btn-danger:hover {
  color: #fff;
  background-color: #c9302c;
  border-color: #ac2925;
}
.btn-danger:active,
.btn-danger.active,
.open > .dropdown-toggle.btn-danger {
  color: #fff;
  background-color: #c9302c;
  border-color: #ac2925;
}
.btn-danger:active:hover,
.btn-danger.active:hover,
.open > .dropdown-toggle.btn-danger:hover,
.btn-danger:active:focus,
.btn-danger.active:focus,
.open > .dropdown-toggle.btn-danger:focus,
.btn-danger:active.focus,
.btn-danger.active.focus,
.open > .dropdown-toggle.btn-danger.focus {
  color: #fff;
  background-color: #ac2925;
  border-color: #761c19;
}
.btn-danger:active,
.btn-danger.active,
.open > .dropdown-toggle.btn-danger {
  background-image: none;
}
.btn-danger.disabled:hover,
.btn-danger[disabled]:hover,
fieldset[disabled] .btn-danger:hover,
.btn-danger.disabled:focus,
.btn-danger[disabled]:focus,
fieldset[disabled] .btn-danger:focus,
.btn-danger.disabled.focus,
.btn-danger[disabled].focus,
fieldset[disabled] .btn-danger.focus {
  background-color: #d9534f;
  border-color: #d43f3a;
}
.btn-danger .badge {
  color: #d9534f;
  background-color: #fff;
}
.btn-link {
  color: #337ab7;
  font-weight: normal;
  border-radius: 0;
}
.btn-link,
.btn-link:active,
.btn-link.active,
.btn-link[disabled],
fieldset[disabled] .btn-link {
  background-color: transparent;
  -webkit-box-shadow: none;
  box-shadow: none;
}
.btn-link,
.btn-link:hover,
.btn-link:focus,
.btn-link:active {
  border-color: transparent;
}
.btn-link:hover,
.btn-link:focus {
  color: #23527c;
  text-decoration: underline;
  background-color: transparent;
}
.btn-link[disabled]:hover,
fieldset[disabled] .btn-link:hover,
.btn-link[disabled]:focus,
fieldset[disabled] .btn-link:focus {
  color: #777777;
  text-decoration: none;
}
.btn-lg,
.btn-group-lg > .btn {
  padding: 10px 16px;
  font-size: 17px;
  line-height: 1.3333333;
  border-radius: 3px;
}
.btn-sm,
.btn-group-sm > .btn {
  padding: 5px 10px;
  font-size: 12px;
  line-height: 1.5;
  border-radius: 1px;
}
.btn-xs,
.btn-group-xs > .btn {
  padding: 1px 5px;
  font-size: 12px;
  line-height: 1.5;
  border-radius: 1px;
}
.btn-block {
  display: block;
  width: 100%;
}
.btn-block + .btn-block {
  margin-top: 5px;
}
input[type="submit"].btn-block,
input[type="reset"].btn-block,
input[type="button"].btn-block {
  width: 100%;
}
.fade {
  opacity: 0;
  -webkit-transition: opacity 0.15s linear;
  -o-transition: opacity 0.15s linear;
  transition: opacity 0.15s linear;
}
.fade.in {
  opacity: 1;
}
.collapse {
  display: none;
}
.collapse.in {
  display: block;
}
tr.collapse.in {
  display: table-row;
}
tbody.collapse.in {
  display: table-row-group;
}
.collapsing {
  position: relative;
  height: 0;
  overflow: hidden;
  -webkit-transition-property: height, visibility;
  transition-property: height, visibility;
  -webkit-transition-duration: 0.35s;
  transition-duration: 0.35s;
  -webkit-transition-timing-function: ease;
  transition-timing-function: ease;
}
.caret {
  display: inline-block;
  width: 0;
  height: 0;
  margin-left: 2px;
  vertical-align: middle;
  border-top: 4px dashed;
  border-top: 4px solid \9;
  border-right: 4px solid transparent;
  border-left: 4px solid transparent;
}
.dropup,
.dropdown {
  position: relative;
}
.dropdown-toggle:focus {
  outline: 0;
}
.dropdown-menu {
  position: absolute;
  top: 100%;
  left: 0;
  z-index: 1000;
  display: none;
  float: left;
  min-width: 160px;
  padding: 5px 0;
  margin: 2px 0 0;
  list-style: none;
  font-size: 13px;
  text-align: left;
  background-color: #fff;
  border: 1px solid #ccc;
  border: 1px solid rgba(0, 0, 0, 0.15);
  border-radius: 2px;
  -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);
  box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);
  background-clip: padding-box;
}
.dropdown-menu.pull-right {
  right: 0;
  left: auto;
}
.dropdown-menu .divider {
  height: 1px;
  margin: 8px 0;
  overflow: hidden;
  background-color: #e5e5e5;
}
.dropdown-menu > li > a {
  display: block;
  padding: 3px 20px;
  clear: both;
  font-weight: normal;
  line-height: 1.42857143;
  color: #333333;
  white-space: nowrap;
}
.dropdown-menu > li > a:hover,
.dropdown-menu > li > a:focus {
  text-decoration: none;
  color: #262626;
  background-color: #f5f5f5;
}
.dropdown-menu > .active > a,
.dropdown-menu > .active > a:hover,
.dropdown-menu > .active > a:focus {
  color: #fff;
  text-decoration: none;
  outline: 0;
  background-color: #337ab7;
}
.dropdown-menu > .disabled > a,
.dropdown-menu > .disabled > a:hover,
.dropdown-menu > .disabled > a:focus {
  color: #777777;
}
.dropdown-menu > .disabled > a:hover,
.dropdown-menu > .disabled > a:focus {
  text-decoration: none;
  background-color: transparent;
  background-image: none;
  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
  cursor: not-allowed;
}
.open > .dropdown-menu {
  display: block;
}
.open > a {
  outline: 0;
}
.dropdown-menu-right {
  left: auto;
  right: 0;
}
.dropdown-menu-left {
  left: 0;
  right: auto;
}
.dropdown-header {
  display: block;
  padding: 3px 20px;
  font-size: 12px;
  line-height: 1.42857143;
  color: #777777;
  white-space: nowrap;
}
.dropdown-backdrop {
  position: fixed;
  left: 0;
  right: 0;
  bottom: 0;
  top: 0;
  z-index: 990;
}
.pull-right > .dropdown-menu {
  right: 0;
  left: auto;
}
.dropup .caret,
.navbar-fixed-bottom .dropdown .caret {
  border-top: 0;
  border-bottom: 4px dashed;
  border-bottom: 4px solid \9;
  content: "";
}
.dropup .dropdown-menu,
.navbar-fixed-bottom .dropdown .dropdown-menu {
  top: auto;
  bottom: 100%;
  margin-bottom: 2px;
}
@media (min-width: 541px) {
  .navbar-right .dropdown-menu {
    left: auto;
    right: 0;
  }
  .navbar-right .dropdown-menu-left {
    left: 0;
    right: auto;
  }
}
.btn-group,
.btn-group-vertical {
  position: relative;
  display: inline-block;
  vertical-align: middle;
}
.btn-group > .btn,
.btn-group-vertical > .btn {
  position: relative;
  float: left;
}
.btn-group > .btn:hover,
.btn-group-vertical > .btn:hover,
.btn-group > .btn:focus,
.btn-group-vertical > .btn:focus,
.btn-group > .btn:active,
.btn-group-vertical > .btn:active,
.btn-group > .btn.active,
.btn-group-vertical > .btn.active {
  z-index: 2;
}
.btn-group .btn + .btn,
.btn-group .btn + .btn-group,
.btn-group .btn-group + .btn,
.btn-group .btn-group + .btn-group {
  margin-left: -1px;
}
.btn-toolbar {
  margin-left: -5px;
}
.btn-toolbar .btn,
.btn-toolbar .btn-group,
.btn-toolbar .input-group {
  float: left;
}
.btn-toolbar > .btn,
.btn-toolbar > .btn-group,
.btn-toolbar > .input-group {
  margin-left: 5px;
}
.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {
  border-radius: 0;
}
.btn-group > .btn:first-child {
  margin-left: 0;
}
.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) {
  border-bottom-right-radius: 0;
  border-top-right-radius: 0;
}
.btn-group > .btn:last-child:not(:first-child),
.btn-group > .dropdown-toggle:not(:first-child) {
  border-bottom-left-radius: 0;
  border-top-left-radius: 0;
}
.btn-group > .btn-group {
  float: left;
}
.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {
  border-radius: 0;
}
.btn-group > .btn-group:first-child:not(:last-child) > .btn:last-child,
.btn-group > .btn-group:first-child:not(:last-child) > .dropdown-toggle {
  border-bottom-right-radius: 0;
  border-top-right-radius: 0;
}
.btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child {
  border-bottom-left-radius: 0;
  border-top-left-radius: 0;
}
.btn-group .dropdown-toggle:active,
.btn-group.open .dropdown-toggle {
  outline: 0;
}
.btn-group > .btn + .dropdown-toggle {
  padding-left: 8px;
  padding-right: 8px;
}
.btn-group > .btn-lg + .dropdown-toggle {
  padding-left: 12px;
  padding-right: 12px;
}
.btn-group.open .dropdown-toggle {
  -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
  box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
}
.btn-group.open .dropdown-toggle.btn-link {
  -webkit-box-shadow: none;
  box-shadow: none;
}
.btn .caret {
  margin-left: 0;
}
.btn-lg .caret {
  border-width: 5px 5px 0;
  border-bottom-width: 0;
}
.dropup .btn-lg .caret {
  border-width: 0 5px 5px;
}
.btn-group-vertical > .btn,
.btn-group-vertical > .btn-group,
.btn-group-vertical > .btn-group > .btn {
  display: block;
  float: none;
  width: 100%;
  max-width: 100%;
}
.btn-group-vertical > .btn-group > .btn {
  float: none;
}
.btn-group-vertical > .btn + .btn,
.btn-group-vertical > .btn + .btn-group,
.btn-group-vertical > .btn-group + .btn,
.btn-group-vertical > .btn-group + .btn-group {
  margin-top: -1px;
  margin-left: 0;
}
.btn-group-vertical > .btn:not(:first-child):not(:last-child) {
  border-radius: 0;
}
.btn-group-vertical > .btn:first-child:not(:last-child) {
  border-top-right-radius: 2px;
  border-top-left-radius: 2px;
  border-bottom-right-radius: 0;
  border-bottom-left-radius: 0;
}
.btn-group-vertical > .btn:last-child:not(:first-child) {
  border-top-right-radius: 0;
  border-top-left-radius: 0;
  border-bottom-right-radius: 2px;
  border-bottom-left-radius: 2px;
}
.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {
  border-radius: 0;
}
.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child,
.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle {
  border-bottom-right-radius: 0;
  border-bottom-left-radius: 0;
}
.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {
  border-top-right-radius: 0;
  border-top-left-radius: 0;
}
.btn-group-justified {
  display: table;
  width: 100%;
  table-layout: fixed;
  border-collapse: separate;
}
.btn-group-justified > .btn,
.btn-group-justified > .btn-group {
  float: none;
  display: table-cell;
  width: 1%;
}
.btn-group-justified > .btn-group .btn {
  width: 100%;
}
.btn-group-justified > .btn-group .dropdown-menu {
  left: auto;
}
[data-toggle="buttons"] > .btn input[type="radio"],
[data-toggle="buttons"] > .btn-group > .btn input[type="radio"],
[data-toggle="buttons"] > .btn input[type="checkbox"],
[data-toggle="buttons"] > .btn-group > .btn input[type="checkbox"] {
  position: absolute;
  clip: rect(0, 0, 0, 0);
  pointer-events: none;
}
.input-group {
  position: relative;
  display: table;
  border-collapse: separate;
}
.input-group[class*="col-"] {
  float: none;
  padding-left: 0;
  padding-right: 0;
}
.input-group .form-control {
  position: relative;
  z-index: 2;
  float: left;
  width: 100%;
  margin-bottom: 0;
}
.input-group .form-control:focus {
  z-index: 3;
}
.input-group-lg > .form-control,
.input-group-lg > .input-group-addon,
.input-group-lg > .input-group-btn > .btn {
  height: 45px;
  padding: 10px 16px;
  font-size: 17px;
  line-height: 1.3333333;
  border-radius: 3px;
}
select.input-group-lg > .form-control,
select.input-group-lg > .input-group-addon,
select.input-group-lg > .input-group-btn > .btn {
  height: 45px;
  line-height: 45px;
}
textarea.input-group-lg > .form-control,
textarea.input-group-lg > .input-group-addon,
textarea.input-group-lg > .input-group-btn > .btn,
select[multiple].input-group-lg > .form-control,
select[multiple].input-group-lg > .input-group-addon,
select[multiple].input-group-lg > .input-group-btn > .btn {
  height: auto;
}
.input-group-sm > .form-control,
.input-group-sm > .input-group-addon,
.input-group-sm > .input-group-btn > .btn {
  height: 30px;
  padding: 5px 10px;
  font-size: 12px;
  line-height: 1.5;
  border-radius: 1px;
}
select.input-group-sm > .form-control,
select.input-group-sm > .input-group-addon,
select.input-group-sm > .input-group-btn > .btn {
  height: 30px;
  line-height: 30px;
}
textarea.input-group-sm > .form-control,
textarea.input-group-sm > .input-group-addon,
textarea.input-group-sm > .input-group-btn > .btn,
select[multiple].input-group-sm > .form-control,
select[multiple].input-group-sm > .input-group-addon,
select[multiple].input-group-sm > .input-group-btn > .btn {
  height: auto;
}
.input-group-addon,
.input-group-btn,
.input-group .form-control {
  display: table-cell;
}
.input-group-addon:not(:first-child):not(:last-child),
.input-group-btn:not(:first-child):not(:last-child),
.input-group .form-control:not(:first-child):not(:last-child) {
  border-radius: 0;
}
.input-group-addon,
.input-group-btn {
  width: 1%;
  white-space: nowrap;
  vertical-align: middle;
}
.input-group-addon {
  padding: 6px 12px;
  font-size: 13px;
  font-weight: normal;
  line-height: 1;
  color: #555555;
  text-align: center;
  background-color: #eeeeee;
  border: 1px solid #ccc;
  border-radius: 2px;
}
.input-group-addon.input-sm {
  padding: 5px 10px;
  font-size: 12px;
  border-radius: 1px;
}
.input-group-addon.input-lg {
  padding: 10px 16px;
  font-size: 17px;
  border-radius: 3px;
}
.input-group-addon input[type="radio"],
.input-group-addon input[type="checkbox"] {
  margin-top: 0;
}
.input-group .form-control:first-child,
.input-group-addon:first-child,
.input-group-btn:first-child > .btn,
.input-group-btn:first-child > .btn-group > .btn,
.input-group-btn:first-child > .dropdown-toggle,
.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),
.input-group-btn:last-child > .btn-group:not(:last-child) > .btn {
  border-bottom-right-radius: 0;
  border-top-right-radius: 0;
}
.input-group-addon:first-child {
  border-right: 0;
}
.input-group .form-control:last-child,
.input-group-addon:last-child,
.input-group-btn:last-child > .btn,
.input-group-btn:last-child > .btn-group > .btn,
.input-group-btn:last-child > .dropdown-toggle,
.input-group-btn:first-child > .btn:not(:first-child),
.input-group-btn:first-child > .btn-group:not(:first-child) > .btn {
  border-bottom-left-radius: 0;
  border-top-left-radius: 0;
}
.input-group-addon:last-child {
  border-left: 0;
}
.input-group-btn {
  position: relative;
  font-size: 0;
  white-space: nowrap;
}
.input-group-btn > .btn {
  position: relative;
}
.input-group-btn > .btn + .btn {
  margin-left: -1px;
}
.input-group-btn > .btn:hover,
.input-group-btn > .btn:focus,
.input-group-btn > .btn:active {
  z-index: 2;
}
.input-group-btn:first-child > .btn,
.input-group-btn:first-child > .btn-group {
  margin-right: -1px;
}
.input-group-btn:last-child > .btn,
.input-group-btn:last-child > .btn-group {
  z-index: 2;
  margin-left: -1px;
}
.nav {
  margin-bottom: 0;
  padding-left: 0;
  list-style: none;
}
.nav > li {
  position: relative;
  display: block;
}
.nav > li > a {
  position: relative;
  display: block;
  padding: 10px 15px;
}
.nav > li > a:hover,
.nav > li > a:focus {
  text-decoration: none;
  background-color: #eeeeee;
}
.nav > li.disabled > a {
  color: #777777;
}
.nav > li.disabled > a:hover,
.nav > li.disabled > a:focus {
  color: #777777;
  text-decoration: none;
  background-color: transparent;
  cursor: not-allowed;
}
.nav .open > a,
.nav .open > a:hover,
.nav .open > a:focus {
  background-color: #eeeeee;
  border-color: #337ab7;
}
.nav .nav-divider {
  height: 1px;
  margin: 8px 0;
  overflow: hidden;
  background-color: #e5e5e5;
}
.nav > li > a > img {
  max-width: none;
}
.nav-tabs {
  border-bottom: 1px solid #ddd;
}
.nav-tabs > li {
  float: left;
  margin-bottom: -1px;
}
.nav-tabs > li > a {
  margin-right: 2px;
  line-height: 1.42857143;
  border: 1px solid transparent;
  border-radius: 2px 2px 0 0;
}
.nav-tabs > li > a:hover {
  border-color: #eeeeee #eeeeee #ddd;
}
.nav-tabs > li.active > a,
.nav-tabs > li.active > a:hover,
.nav-tabs > li.active > a:focus {
  color: #555555;
  background-color: #fff;
  border: 1px solid #ddd;
  border-bottom-color: transparent;
  cursor: default;
}
.nav-tabs.nav-justified {
  width: 100%;
  border-bottom: 0;
}
.nav-tabs.nav-justified > li {
  float: none;
}
.nav-tabs.nav-justified > li > a {
  text-align: center;
  margin-bottom: 5px;
}
.nav-tabs.nav-justified > .dropdown .dropdown-menu {
  top: auto;
  left: auto;
}
@media (min-width: 768px) {
  .nav-tabs.nav-justified > li {
    display: table-cell;
    width: 1%;
  }
  .nav-tabs.nav-justified > li > a {
    margin-bottom: 0;
  }
}
.nav-tabs.nav-justified > li > a {
  margin-right: 0;
  border-radius: 2px;
}
.nav-tabs.nav-justified > .active > a,
.nav-tabs.nav-justified > .active > a:hover,
.nav-tabs.nav-justified > .active > a:focus {
  border: 1px solid #ddd;
}
@media (min-width: 768px) {
  .nav-tabs.nav-justified > li > a {
    border-bottom: 1px solid #ddd;
    border-radius: 2px 2px 0 0;
  }
  .nav-tabs.nav-justified > .active > a,
  .nav-tabs.nav-justified > .active > a:hover,
  .nav-tabs.nav-justified > .active > a:focus {
    border-bottom-color: #fff;
  }
}
.nav-pills > li {
  float: left;
}
.nav-pills > li > a {
  border-radius: 2px;
}
.nav-pills > li + li {
  margin-left: 2px;
}
.nav-pills > li.active > a,
.nav-pills > li.active > a:hover,
.nav-pills > li.active > a:focus {
  color: #fff;
  background-color: #337ab7;
}
.nav-stacked > li {
  float: none;
}
.nav-stacked > li + li {
  margin-top: 2px;
  margin-left: 0;
}
.nav-justified {
  width: 100%;
}
.nav-justified > li {
  float: none;
}
.nav-justified > li > a {
  text-align: center;
  margin-bottom: 5px;
}
.nav-justified > .dropdown .dropdown-menu {
  top: auto;
  left: auto;
}
@media (min-width: 768px) {
  .nav-justified > li {
    display: table-cell;
    width: 1%;
  }
  .nav-justified > li > a {
    margin-bottom: 0;
  }
}
.nav-tabs-justified {
  border-bottom: 0;
}
.nav-tabs-justified > li > a {
  margin-right: 0;
  border-radius: 2px;
}
.nav-tabs-justified > .active > a,
.nav-tabs-justified > .active > a:hover,
.nav-tabs-justified > .active > a:focus {
  border: 1px solid #ddd;
}
@media (min-width: 768px) {
  .nav-tabs-justified > li > a {
    border-bottom: 1px solid #ddd;
    border-radius: 2px 2px 0 0;
  }
  .nav-tabs-justified > .active > a,
  .nav-tabs-justified > .active > a:hover,
  .nav-tabs-justified > .active > a:focus {
    border-bottom-color: #fff;
  }
}
.tab-content > .tab-pane {
  display: none;
}
.tab-content > .active {
  display: block;
}
.nav-tabs .dropdown-menu {
  margin-top: -1px;
  border-top-right-radius: 0;
  border-top-left-radius: 0;
}
.navbar {
  position: relative;
  min-height: 30px;
  margin-bottom: 18px;
  border: 1px solid transparent;
}
@media (min-width: 541px) {
  .navbar {
    border-radius: 2px;
  }
}
@media (min-width: 541px) {
  .navbar-header {
    float: left;
  }
}
.navbar-collapse {
  overflow-x: visible;
  padding-right: 0px;
  padding-left: 0px;
  border-top: 1px solid transparent;
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1);
  -webkit-overflow-scrolling: touch;
}
.navbar-collapse.in {
  overflow-y: auto;
}
@media (min-width: 541px) {
  .navbar-collapse {
    width: auto;
    border-top: 0;
    box-shadow: none;
  }
  .navbar-collapse.collapse {
    display: block !important;
    height: auto !important;
    padding-bottom: 0;
    overflow: visible !important;
  }
  .navbar-collapse.in {
    overflow-y: visible;
  }
  .navbar-fixed-top .navbar-collapse,
  .navbar-static-top .navbar-collapse,
  .navbar-fixed-bottom .navbar-collapse {
    padding-left: 0;
    padding-right: 0;
  }
}
.navbar-fixed-top .navbar-collapse,
.navbar-fixed-bottom .navbar-collapse {
  max-height: 340px;
}
@media (max-device-width: 540px) and (orientation: landscape) {
  .navbar-fixed-top .navbar-collapse,
  .navbar-fixed-bottom .navbar-collapse {
    max-height: 200px;
  }
}
.container > .navbar-header,
.container-fluid > .navbar-header,
.container > .navbar-collapse,
.container-fluid > .navbar-collapse {
  margin-right: 0px;
  margin-left: 0px;
}
@media (min-width: 541px) {
  .container > .navbar-header,
  .container-fluid > .navbar-header,
  .container > .navbar-collapse,
  .container-fluid > .navbar-collapse {
    margin-right: 0;
    margin-left: 0;
  }
}
.navbar-static-top {
  z-index: 1000;
  border-width: 0 0 1px;
}
@media (min-width: 541px) {
  .navbar-static-top {
    border-radius: 0;
  }
}
.navbar-fixed-top,
.navbar-fixed-bottom {
  position: fixed;
  right: 0;
  left: 0;
  z-index: 1030;
}
@media (min-width: 541px) {
  .navbar-fixed-top,
  .navbar-fixed-bottom {
    border-radius: 0;
  }
}
.navbar-fixed-top {
  top: 0;
  border-width: 0 0 1px;
}
.navbar-fixed-bottom {
  bottom: 0;
  margin-bottom: 0;
  border-width: 1px 0 0;
}
.navbar-brand {
  float: left;
  padding: 6px 0px;
  font-size: 17px;
  line-height: 18px;
  height: 30px;
}
.navbar-brand:hover,
.navbar-brand:focus {
  text-decoration: none;
}
.navbar-brand > img {
  display: block;
}
@media (min-width: 541px) {
  .navbar > .container .navbar-brand,
  .navbar > .container-fluid .navbar-brand {
    margin-left: 0px;
  }
}
.navbar-toggle {
  position: relative;
  float: right;
  margin-right: 0px;
  padding: 9px 10px;
  margin-top: -2px;
  margin-bottom: -2px;
  background-color: transparent;
  background-image: none;
  border: 1px solid transparent;
  border-radius: 2px;
}
.navbar-toggle:focus {
  outline: 0;
}
.navbar-toggle .icon-bar {
  display: block;
  width: 22px;
  height: 2px;
  border-radius: 1px;
}
.navbar-toggle .icon-bar + .icon-bar {
  margin-top: 4px;
}
@media (min-width: 541px) {
  .navbar-toggle {
    display: none;
  }
}
.navbar-nav {
  margin: 3px 0px;
}
.navbar-nav > li > a {
  padding-top: 10px;
  padding-bottom: 10px;
  line-height: 18px;
}
@media (max-width: 540px) {
  .navbar-nav .open .dropdown-menu {
    position: static;
    float: none;
    width: auto;
    margin-top: 0;
    background-color: transparent;
    border: 0;
    box-shadow: none;
  }
  .navbar-nav .open .dropdown-menu > li > a,
  .navbar-nav .open .dropdown-menu .dropdown-header {
    padding: 5px 15px 5px 25px;
  }
  .navbar-nav .open .dropdown-menu > li > a {
    line-height: 18px;
  }
  .navbar-nav .open .dropdown-menu > li > a:hover,
  .navbar-nav .open .dropdown-menu > li > a:focus {
    background-image: none;
  }
}
@media (min-width: 541px) {
  .navbar-nav {
    float: left;
    margin: 0;
  }
  .navbar-nav > li {
    float: left;
  }
  .navbar-nav > li > a {
    padding-top: 6px;
    padding-bottom: 6px;
  }
}
.navbar-form {
  margin-left: 0px;
  margin-right: 0px;
  padding: 10px 0px;
  border-top: 1px solid transparent;
  border-bottom: 1px solid transparent;
  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);
  margin-top: -1px;
  margin-bottom: -1px;
}
@media (min-width: 768px) {
  .navbar-form .form-group {
    display: inline-block;
    margin-bottom: 0;
    vertical-align: middle;
  }
  .navbar-form .form-control {
    display: inline-block;
    width: auto;
    vertical-align: middle;
  }
  .navbar-form .form-control-static {
    display: inline-block;
  }
  .navbar-form .input-group {
    display: inline-table;
    vertical-align: middle;
  }
  .navbar-form .input-group .input-group-addon,
  .navbar-form .input-group .input-group-btn,
  .navbar-form .input-group .form-control {
    width: auto;
  }
  .navbar-form .input-group > .form-control {
    width: 100%;
  }
  .navbar-form .control-label {
    margin-bottom: 0;
    vertical-align: middle;
  }
  .navbar-form .radio,
  .navbar-form .checkbox {
    display: inline-block;
    margin-top: 0;
    margin-bottom: 0;
    vertical-align: middle;
  }
  .navbar-form .radio label,
  .navbar-form .checkbox label {
    padding-left: 0;
  }
  .navbar-form .radio input[type="radio"],
  .navbar-form .checkbox input[type="checkbox"] {
    position: relative;
    margin-left: 0;
  }
  .navbar-form .has-feedback .form-control-feedback {
    top: 0;
  }
}
@media (max-width: 540px) {
  .navbar-form .form-group {
    margin-bottom: 5px;
  }
  .navbar-form .form-group:last-child {
    margin-bottom: 0;
  }
}
@media (min-width: 541px) {
  .navbar-form {
    width: auto;
    border: 0;
    margin-left: 0;
    margin-right: 0;
    padding-top: 0;
    padding-bottom: 0;
    -webkit-box-shadow: none;
    box-shadow: none;
  }
}
.navbar-nav > li > .dropdown-menu {
  margin-top: 0;
  border-top-right-radius: 0;
  border-top-left-radius: 0;
}
.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {
  margin-bottom: 0;
  border-top-right-radius: 2px;
  border-top-left-radius: 2px;
  border-bottom-right-radius: 0;
  border-bottom-left-radius: 0;
}
.navbar-btn {
  margin-top: -1px;
  margin-bottom: -1px;
}
.navbar-btn.btn-sm {
  margin-top: 0px;
  margin-bottom: 0px;
}
.navbar-btn.btn-xs {
  margin-top: 4px;
  margin-bottom: 4px;
}
.navbar-text {
  margin-top: 6px;
  margin-bottom: 6px;
}
@media (min-width: 541px) {
  .navbar-text {
    float: left;
    margin-left: 0px;
    margin-right: 0px;
  }
}
@media (min-width: 541px) {
  .navbar-left {
    float: left !important;
    float: left;
  }
  .navbar-right {
    float: right !important;
    float: right;
    margin-right: 0px;
  }
  .navbar-right ~ .navbar-right {
    margin-right: 0;
  }
}
.navbar-default {
  background-color: #f8f8f8;
  border-color: #e7e7e7;
}
.navbar-default .navbar-brand {
  color: #777;
}
.navbar-default .navbar-brand:hover,
.navbar-default .navbar-brand:focus {
  color: #5e5e5e;
  background-color: transparent;
}
.navbar-default .navbar-text {
  color: #777;
}
.navbar-default .navbar-nav > li > a {
  color: #777;
}
.navbar-default .navbar-nav > li > a:hover,
.navbar-default .navbar-nav > li > a:focus {
  color: #333;
  background-color: transparent;
}
.navbar-default .navbar-nav > .active > a,
.navbar-default .navbar-nav > .active > a:hover,
.navbar-default .navbar-nav > .active > a:focus {
  color: #555;
  background-color: #e7e7e7;
}
.navbar-default .navbar-nav > .disabled > a,
.navbar-default .navbar-nav > .disabled > a:hover,
.navbar-default .navbar-nav > .disabled > a:focus {
  color: #ccc;
  background-color: transparent;
}
.navbar-default .navbar-toggle {
  border-color: #ddd;
}
.navbar-default .navbar-toggle:hover,
.navbar-default .navbar-toggle:focus {
  background-color: #ddd;
}
.navbar-default .navbar-toggle .icon-bar {
  background-color: #888;
}
.navbar-default .navbar-collapse,
.navbar-default .navbar-form {
  border-color: #e7e7e7;
}
.navbar-default .navbar-nav > .open > a,
.navbar-default .navbar-nav > .open > a:hover,
.navbar-default .navbar-nav > .open > a:focus {
  background-color: #e7e7e7;
  color: #555;
}
@media (max-width: 540px) {
  .navbar-default .navbar-nav .open .dropdown-menu > li > a {
    color: #777;
  }
  .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover,
  .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus {
    color: #333;
    background-color: transparent;
  }
  .navbar-default .navbar-nav .open .dropdown-menu > .active > a,
  .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover,
  .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus {
    color: #555;
    background-color: #e7e7e7;
  }
  .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a,
  .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover,
  .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus {
    color: #ccc;
    background-color: transparent;
  }
}
.navbar-default .navbar-link {
  color: #777;
}
.navbar-default .navbar-link:hover {
  color: #333;
}
.navbar-default .btn-link {
  color: #777;
}
.navbar-default .btn-link:hover,
.navbar-default .btn-link:focus {
  color: #333;
}
.navbar-default .btn-link[disabled]:hover,
fieldset[disabled] .navbar-default .btn-link:hover,
.navbar-default .btn-link[disabled]:focus,
fieldset[disabled] .navbar-default .btn-link:focus {
  color: #ccc;
}
.navbar-inverse {
  background-color: #222;
  border-color: #080808;
}
.navbar-inverse .navbar-brand {
  color: #9d9d9d;
}
.navbar-inverse .navbar-brand:hover,
.navbar-inverse .navbar-brand:focus {
  color: #fff;
  background-color: transparent;
}
.navbar-inverse .navbar-text {
  color: #9d9d9d;
}
.navbar-inverse .navbar-nav > li > a {
  color: #9d9d9d;
}
.navbar-inverse .navbar-nav > li > a:hover,
.navbar-inverse .navbar-nav > li > a:focus {
  color: #fff;
  background-color: transparent;
}
.navbar-inverse .navbar-nav > .active > a,
.navbar-inverse .navbar-nav > .active > a:hover,
.navbar-inverse .navbar-nav > .active > a:focus {
  color: #fff;
  background-color: #080808;
}
.navbar-inverse .navbar-nav > .disabled > a,
.navbar-inverse .navbar-nav > .disabled > a:hover,
.navbar-inverse .navbar-nav > .disabled > a:focus {
  color: #444;
  background-color: transparent;
}
.navbar-inverse .navbar-toggle {
  border-color: #333;
}
.navbar-inverse .navbar-toggle:hover,
.navbar-inverse .navbar-toggle:focus {
  background-color: #333;
}
.navbar-inverse .navbar-toggle .icon-bar {
  background-color: #fff;
}
.navbar-inverse .navbar-collapse,
.navbar-inverse .navbar-form {
  border-color: #101010;
}
.navbar-inverse .navbar-nav > .open > a,
.navbar-inverse .navbar-nav > .open > a:hover,
.navbar-inverse .navbar-nav > .open > a:focus {
  background-color: #080808;
  color: #fff;
}
@media (max-width: 540px) {
  .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header {
    border-color: #080808;
  }
  .navbar-inverse .navbar-nav .open .dropdown-menu .divider {
    background-color: #080808;
  }
  .navbar-inverse .navbar-nav .open .dropdown-menu > li > a {
    color: #9d9d9d;
  }
  .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover,
  .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus {
    color: #fff;
    background-color: transparent;
  }
  .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a,
  .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover,
  .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus {
    color: #fff;
    background-color: #080808;
  }
  .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a,
  .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover,
  .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus {
    color: #444;
    background-color: transparent;
  }
}
.navbar-inverse .navbar-link {
  color: #9d9d9d;
}
.navbar-inverse .navbar-link:hover {
  color: #fff;
}
.navbar-inverse .btn-link {
  color: #9d9d9d;
}
.navbar-inverse .btn-link:hover,
.navbar-inverse .btn-link:focus {
  color: #fff;
}
.navbar-inverse .btn-link[disabled]:hover,
fieldset[disabled] .navbar-inverse .btn-link:hover,
.navbar-inverse .btn-link[disabled]:focus,
fieldset[disabled] .navbar-inverse .btn-link:focus {
  color: #444;
}
.breadcrumb {
  padding: 8px 15px;
  margin-bottom: 18px;
  list-style: none;
  background-color: #f5f5f5;
  border-radius: 2px;
}
.breadcrumb > li {
  display: inline-block;
}
.breadcrumb > li + li:before {
  content: "/\00a0";
  padding: 0 5px;
  color: #5e5e5e;
}
.breadcrumb > .active {
  color: #777777;
}
.pagination {
  display: inline-block;
  padding-left: 0;
  margin: 18px 0;
  border-radius: 2px;
}
.pagination > li {
  display: inline;
}
.pagination > li > a,
.pagination > li > span {
  position: relative;
  float: left;
  padding: 6px 12px;
  line-height: 1.42857143;
  text-decoration: none;
  color: #337ab7;
  background-color: #fff;
  border: 1px solid #ddd;
  margin-left: -1px;
}
.pagination > li:first-child > a,
.pagination > li:first-child > span {
  margin-left: 0;
  border-bottom-left-radius: 2px;
  border-top-left-radius: 2px;
}
.pagination > li:last-child > a,
.pagination > li:last-child > span {
  border-bottom-right-radius: 2px;
  border-top-right-radius: 2px;
}
.pagination > li > a:hover,
.pagination > li > span:hover,
.pagination > li > a:focus,
.pagination > li > span:focus {
  z-index: 2;
  color: #23527c;
  background-color: #eeeeee;
  border-color: #ddd;
}
.pagination > .active > a,
.pagination > .active > span,
.pagination > .active > a:hover,
.pagination > .active > span:hover,
.pagination > .active > a:focus,
.pagination > .active > span:focus {
  z-index: 3;
  color: #fff;
  background-color: #337ab7;
  border-color: #337ab7;
  cursor: default;
}
.pagination > .disabled > span,
.pagination > .disabled > span:hover,
.pagination > .disabled > span:focus,
.pagination > .disabled > a,
.pagination > .disabled > a:hover,
.pagination > .disabled > a:focus {
  color: #777777;
  background-color: #fff;
  border-color: #ddd;
  cursor: not-allowed;
}
.pagination-lg > li > a,
.pagination-lg > li > span {
  padding: 10px 16px;
  font-size: 17px;
  line-height: 1.3333333;
}
.pagination-lg > li:first-child > a,
.pagination-lg > li:first-child > span {
  border-bottom-left-radius: 3px;
  border-top-left-radius: 3px;
}
.pagination-lg > li:last-child > a,
.pagination-lg > li:last-child > span {
  border-bottom-right-radius: 3px;
  border-top-right-radius: 3px;
}
.pagination-sm > li > a,
.pagination-sm > li > span {
  padding: 5px 10px;
  font-size: 12px;
  line-height: 1.5;
}
.pagination-sm > li:first-child > a,
.pagination-sm > li:first-child > span {
  border-bottom-left-radius: 1px;
  border-top-left-radius: 1px;
}
.pagination-sm > li:last-child > a,
.pagination-sm > li:last-child > span {
  border-bottom-right-radius: 1px;
  border-top-right-radius: 1px;
}
.pager {
  padding-left: 0;
  margin: 18px 0;
  list-style: none;
  text-align: center;
}
.pager li {
  display: inline;
}
.pager li > a,
.pager li > span {
  display: inline-block;
  padding: 5px 14px;
  background-color: #fff;
  border: 1px solid #ddd;
  border-radius: 15px;
}
.pager li > a:hover,
.pager li > a:focus {
  text-decoration: none;
  background-color: #eeeeee;
}
.pager .next > a,
.pager .next > span {
  float: right;
}
.pager .previous > a,
.pager .previous > span {
  float: left;
}
.pager .disabled > a,
.pager .disabled > a:hover,
.pager .disabled > a:focus,
.pager .disabled > span {
  color: #777777;
  background-color: #fff;
  cursor: not-allowed;
}
.label {
  display: inline;
  padding: .2em .6em .3em;
  font-size: 75%;
  font-weight: bold;
  line-height: 1;
  color: #fff;
  text-align: center;
  white-space: nowrap;
  vertical-align: baseline;
  border-radius: .25em;
}
a.label:hover,
a.label:focus {
  color: #fff;
  text-decoration: none;
  cursor: pointer;
}
.label:empty {
  display: none;
}
.btn .label {
  position: relative;
  top: -1px;
}
.label-default {
  background-color: #777777;
}
.label-default[href]:hover,
.label-default[href]:focus {
  background-color: #5e5e5e;
}
.label-primary {
  background-color: #337ab7;
}
.label-primary[href]:hover,
.label-primary[href]:focus {
  background-color: #286090;
}
.label-success {
  background-color: #5cb85c;
}
.label-success[href]:hover,
.label-success[href]:focus {
  background-color: #449d44;
}
.label-info {
  background-color: #5bc0de;
}
.label-info[href]:hover,
.label-info[href]:focus {
  background-color: #31b0d5;
}
.label-warning {
  background-color: #f0ad4e;
}
.label-warning[href]:hover,
.label-warning[href]:focus {
  background-color: #ec971f;
}
.label-danger {
  background-color: #d9534f;
}
.label-danger[href]:hover,
.label-danger[href]:focus {
  background-color: #c9302c;
}
.badge {
  display: inline-block;
  min-width: 10px;
  padding: 3px 7px;
  font-size: 12px;
  font-weight: bold;
  color: #fff;
  line-height: 1;
  vertical-align: middle;
  white-space: nowrap;
  text-align: center;
  background-color: #777777;
  border-radius: 10px;
}
.badge:empty {
  display: none;
}
.btn .badge {
  position: relative;
  top: -1px;
}
.btn-xs .badge,
.btn-group-xs > .btn .badge {
  top: 0;
  padding: 1px 5px;
}
a.badge:hover,
a.badge:focus {
  color: #fff;
  text-decoration: none;
  cursor: pointer;
}
.list-group-item.active > .badge,
.nav-pills > .active > a > .badge {
  color: #337ab7;
  background-color: #fff;
}
.list-group-item > .badge {
  float: right;
}
.list-group-item > .badge + .badge {
  margin-right: 5px;
}
.nav-pills > li > a > .badge {
  margin-left: 3px;
}
.jumbotron {
  padding-top: 30px;
  padding-bottom: 30px;
  margin-bottom: 30px;
  color: inherit;
  background-color: #eeeeee;
}
.jumbotron h1,
.jumbotron .h1 {
  color: inherit;
}
.jumbotron p {
  margin-bottom: 15px;
  font-size: 20px;
  font-weight: 200;
}
.jumbotron > hr {
  border-top-color: #d5d5d5;
}
.container .jumbotron,
.container-fluid .jumbotron {
  border-radius: 3px;
  padding-left: 0px;
  padding-right: 0px;
}
.jumbotron .container {
  max-width: 100%;
}
@media screen and (min-width: 768px) {
  .jumbotron {
    padding-top: 48px;
    padding-bottom: 48px;
  }
  .container .jumbotron,
  .container-fluid .jumbotron {
    padding-left: 60px;
    padding-right: 60px;
  }
  .jumbotron h1,
  .jumbotron .h1 {
    font-size: 59px;
  }
}
.thumbnail {
  display: block;
  padding: 4px;
  margin-bottom: 18px;
  line-height: 1.42857143;
  background-color: #fff;
  border: 1px solid #ddd;
  border-radius: 2px;
  -webkit-transition: border 0.2s ease-in-out;
  -o-transition: border 0.2s ease-in-out;
  transition: border 0.2s ease-in-out;
}
.thumbnail > img,
.thumbnail a > img {
  margin-left: auto;
  margin-right: auto;
}
a.thumbnail:hover,
a.thumbnail:focus,
a.thumbnail.active {
  border-color: #337ab7;
}
.thumbnail .caption {
  padding: 9px;
  color: #000;
}
.alert {
  padding: 15px;
  margin-bottom: 18px;
  border: 1px solid transparent;
  border-radius: 2px;
}
.alert h4 {
  margin-top: 0;
  color: inherit;
}
.alert .alert-link {
  font-weight: bold;
}
.alert > p,
.alert > ul {
  margin-bottom: 0;
}
.alert > p + p {
  margin-top: 5px;
}
.alert-dismissable,
.alert-dismissible {
  padding-right: 35px;
}
.alert-dismissable .close,
.alert-dismissible .close {
  position: relative;
  top: -2px;
  right: -21px;
  color: inherit;
}
.alert-success {
  background-color: #dff0d8;
  border-color: #d6e9c6;
  color: #3c763d;
}
.alert-success hr {
  border-top-color: #c9e2b3;
}
.alert-success .alert-link {
  color: #2b542c;
}
.alert-info {
  background-color: #d9edf7;
  border-color: #bce8f1;
  color: #31708f;
}
.alert-info hr {
  border-top-color: #a6e1ec;
}
.alert-info .alert-link {
  color: #245269;
}
.alert-warning {
  background-color: #fcf8e3;
  border-color: #faebcc;
  color: #8a6d3b;
}
.alert-warning hr {
  border-top-color: #f7e1b5;
}
.alert-warning .alert-link {
  color: #66512c;
}
.alert-danger {
  background-color: #f2dede;
  border-color: #ebccd1;
  color: #a94442;
}
.alert-danger hr {
  border-top-color: #e4b9c0;
}
.alert-danger .alert-link {
  color: #843534;
}
@-webkit-keyframes progress-bar-stripes {
  from {
    background-position: 40px 0;
  }
  to {
    background-position: 0 0;
  }
}
@keyframes progress-bar-stripes {
  from {
    background-position: 40px 0;
  }
  to {
    background-position: 0 0;
  }
}
.progress {
  overflow: hidden;
  height: 18px;
  margin-bottom: 18px;
  background-color: #f5f5f5;
  border-radius: 2px;
  -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
  box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
}
.progress-bar {
  float: left;
  width: 0%;
  height: 100%;
  font-size: 12px;
  line-height: 18px;
  color: #fff;
  text-align: center;
  background-color: #337ab7;
  -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);
  box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);
  -webkit-transition: width 0.6s ease;
  -o-transition: width 0.6s ease;
  transition: width 0.6s ease;
}
.progress-striped .progress-bar,
.progress-bar-striped {
  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
  background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
  background-size: 40px 40px;
}
.progress.active .progress-bar,
.progress-bar.active {
  -webkit-animation: progress-bar-stripes 2s linear infinite;
  -o-animation: progress-bar-stripes 2s linear infinite;
  animation: progress-bar-stripes 2s linear infinite;
}
.progress-bar-success {
  background-color: #5cb85c;
}
.progress-striped .progress-bar-success {
  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
  background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
}
.progress-bar-info {
  background-color: #5bc0de;
}
.progress-striped .progress-bar-info {
  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
  background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
}
.progress-bar-warning {
  background-color: #f0ad4e;
}
.progress-striped .progress-bar-warning {
  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
  background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
}
.progress-bar-danger {
  background-color: #d9534f;
}
.progress-striped .progress-bar-danger {
  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
  background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
}
.media {
  margin-top: 15px;
}
.media:first-child {
  margin-top: 0;
}
.media,
.media-body {
  zoom: 1;
  overflow: hidden;
}
.media-body {
  width: 10000px;
}
.media-object {
  display: block;
}
.media-object.img-thumbnail {
  max-width: none;
}
.media-right,
.media > .pull-right {
  padding-left: 10px;
}
.media-left,
.media > .pull-left {
  padding-right: 10px;
}
.media-left,
.media-right,
.media-body {
  display: table-cell;
  vertical-align: top;
}
.media-middle {
  vertical-align: middle;
}
.media-bottom {
  vertical-align: bottom;
}
.media-heading {
  margin-top: 0;
  margin-bottom: 5px;
}
.media-list {
  padding-left: 0;
  list-style: none;
}
.list-group {
  margin-bottom: 20px;
  padding-left: 0;
}
.list-group-item {
  position: relative;
  display: block;
  padding: 10px 15px;
  margin-bottom: -1px;
  background-color: #fff;
  border: 1px solid #ddd;
}
.list-group-item:first-child {
  border-top-right-radius: 2px;
  border-top-left-radius: 2px;
}
.list-group-item:last-child {
  margin-bottom: 0;
  border-bottom-right-radius: 2px;
  border-bottom-left-radius: 2px;
}
a.list-group-item,
button.list-group-item {
  color: #555;
}
a.list-group-item .list-group-item-heading,
button.list-group-item .list-group-item-heading {
  color: #333;
}
a.list-group-item:hover,
button.list-group-item:hover,
a.list-group-item:focus,
button.list-group-item:focus {
  text-decoration: none;
  color: #555;
  background-color: #f5f5f5;
}
button.list-group-item {
  width: 100%;
  text-align: left;
}
.list-group-item.disabled,
.list-group-item.disabled:hover,
.list-group-item.disabled:focus {
  background-color: #eeeeee;
  color: #777777;
  cursor: not-allowed;
}
.list-group-item.disabled .list-group-item-heading,
.list-group-item.disabled:hover .list-group-item-heading,
.list-group-item.disabled:focus .list-group-item-heading {
  color: inherit;
}
.list-group-item.disabled .list-group-item-text,
.list-group-item.disabled:hover .list-group-item-text,
.list-group-item.disabled:focus .list-group-item-text {
  color: #777777;
}
.list-group-item.active,
.list-group-item.active:hover,
.list-group-item.active:focus {
  z-index: 2;
  color: #fff;
  background-color: #337ab7;
  border-color: #337ab7;
}
.list-group-item.active .list-group-item-heading,
.list-group-item.active:hover .list-group-item-heading,
.list-group-item.active:focus .list-group-item-heading,
.list-group-item.active .list-group-item-heading > small,
.list-group-item.active:hover .list-group-item-heading > small,
.list-group-item.active:focus .list-group-item-heading > small,
.list-group-item.active .list-group-item-heading > .small,
.list-group-item.active:hover .list-group-item-heading > .small,
.list-group-item.active:focus .list-group-item-heading > .small {
  color: inherit;
}
.list-group-item.active .list-group-item-text,
.list-group-item.active:hover .list-group-item-text,
.list-group-item.active:focus .list-group-item-text {
  color: #c7ddef;
}
.list-group-item-success {
  color: #3c763d;
  background-color: #dff0d8;
}
a.list-group-item-success,
button.list-group-item-success {
  color: #3c763d;
}
a.list-group-item-success .list-group-item-heading,
button.list-group-item-success .list-group-item-heading {
  color: inherit;
}
a.list-group-item-success:hover,
button.list-group-item-success:hover,
a.list-group-item-success:focus,
button.list-group-item-success:focus {
  color: #3c763d;
  background-color: #d0e9c6;
}
a.list-group-item-success.active,
button.list-group-item-success.active,
a.list-group-item-success.active:hover,
button.list-group-item-success.active:hover,
a.list-group-item-success.active:focus,
button.list-group-item-success.active:focus {
  color: #fff;
  background-color: #3c763d;
  border-color: #3c763d;
}
.list-group-item-info {
  color: #31708f;
  background-color: #d9edf7;
}
a.list-group-item-info,
button.list-group-item-info {
  color: #31708f;
}
a.list-group-item-info .list-group-item-heading,
button.list-group-item-info .list-group-item-heading {
  color: inherit;
}
a.list-group-item-info:hover,
button.list-group-item-info:hover,
a.list-group-item-info:focus,
button.list-group-item-info:focus {
  color: #31708f;
  background-color: #c4e3f3;
}
a.list-group-item-info.active,
button.list-group-item-info.active,
a.list-group-item-info.active:hover,
button.list-group-item-info.active:hover,
a.list-group-item-info.active:focus,
button.list-group-item-info.active:focus {
  color: #fff;
  background-color: #31708f;
  border-color: #31708f;
}
.list-group-item-warning {
  color: #8a6d3b;
  background-color: #fcf8e3;
}
a.list-group-item-warning,
button.list-group-item-warning {
  color: #8a6d3b;
}
a.list-group-item-warning .list-group-item-heading,
button.list-group-item-warning .list-group-item-heading {
  color: inherit;
}
a.list-group-item-warning:hover,
button.list-group-item-warning:hover,
a.list-group-item-warning:focus,
button.list-group-item-warning:focus {
  color: #8a6d3b;
  background-color: #faf2cc;
}
a.list-group-item-warning.active,
button.list-group-item-warning.active,
a.list-group-item-warning.active:hover,
button.list-group-item-warning.active:hover,
a.list-group-item-warning.active:focus,
button.list-group-item-warning.active:focus {
  color: #fff;
  background-color: #8a6d3b;
  border-color: #8a6d3b;
}
.list-group-item-danger {
  color: #a94442;
  background-color: #f2dede;
}
a.list-group-item-danger,
button.list-group-item-danger {
  color: #a94442;
}
a.list-group-item-danger .list-group-item-heading,
button.list-group-item-danger .list-group-item-heading {
  color: inherit;
}
a.list-group-item-danger:hover,
button.list-group-item-danger:hover,
a.list-group-item-danger:focus,
button.list-group-item-danger:focus {
  color: #a94442;
  background-color: #ebcccc;
}
a.list-group-item-danger.active,
button.list-group-item-danger.active,
a.list-group-item-danger.active:hover,
button.list-group-item-danger.active:hover,
a.list-group-item-danger.active:focus,
button.list-group-item-danger.active:focus {
  color: #fff;
  background-color: #a94442;
  border-color: #a94442;
}
.list-group-item-heading {
  margin-top: 0;
  margin-bottom: 5px;
}
.list-group-item-text {
  margin-bottom: 0;
  line-height: 1.3;
}
.panel {
  margin-bottom: 18px;
  background-color: #fff;
  border: 1px solid transparent;
  border-radius: 2px;
  -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);
  box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);
}
.panel-body {
  padding: 15px;
}
.panel-heading {
  padding: 10px 15px;
  border-bottom: 1px solid transparent;
  border-top-right-radius: 1px;
  border-top-left-radius: 1px;
}
.panel-heading > .dropdown .dropdown-toggle {
  color: inherit;
}
.panel-title {
  margin-top: 0;
  margin-bottom: 0;
  font-size: 15px;
  color: inherit;
}
.panel-title > a,
.panel-title > small,
.panel-title > .small,
.panel-title > small > a,
.panel-title > .small > a {
  color: inherit;
}
.panel-footer {
  padding: 10px 15px;
  background-color: #f5f5f5;
  border-top: 1px solid #ddd;
  border-bottom-right-radius: 1px;
  border-bottom-left-radius: 1px;
}
.panel > .list-group,
.panel > .panel-collapse > .list-group {
  margin-bottom: 0;
}
.panel > .list-group .list-group-item,
.panel > .panel-collapse > .list-group .list-group-item {
  border-width: 1px 0;
  border-radius: 0;
}
.panel > .list-group:first-child .list-group-item:first-child,
.panel > .panel-collapse > .list-group:first-child .list-group-item:first-child {
  border-top: 0;
  border-top-right-radius: 1px;
  border-top-left-radius: 1px;
}
.panel > .list-group:last-child .list-group-item:last-child,
.panel > .panel-collapse > .list-group:last-child .list-group-item:last-child {
  border-bottom: 0;
  border-bottom-right-radius: 1px;
  border-bottom-left-radius: 1px;
}
.panel > .panel-heading + .panel-collapse > .list-group .list-group-item:first-child {
  border-top-right-radius: 0;
  border-top-left-radius: 0;
}
.panel-heading + .list-group .list-group-item:first-child {
  border-top-width: 0;
}
.list-group + .panel-footer {
  border-top-width: 0;
}
.panel > .table,
.panel > .table-responsive > .table,
.panel > .panel-collapse > .table {
  margin-bottom: 0;
}
.panel > .table caption,
.panel > .table-responsive > .table caption,
.panel > .panel-collapse > .table caption {
  padding-left: 15px;
  padding-right: 15px;
}
.panel > .table:first-child,
.panel > .table-responsive:first-child > .table:first-child {
  border-top-right-radius: 1px;
  border-top-left-radius: 1px;
}
.panel > .table:first-child > thead:first-child > tr:first-child,
.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child,
.panel > .table:first-child > tbody:first-child > tr:first-child,
.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child {
  border-top-left-radius: 1px;
  border-top-right-radius: 1px;
}
.panel > .table:first-child > thead:first-child > tr:first-child td:first-child,
.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child,
.panel > .table:first-child > tbody:first-child > tr:first-child td:first-child,
.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child,
.panel > .table:first-child > thead:first-child > tr:first-child th:first-child,
.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child,
.panel > .table:first-child > tbody:first-child > tr:first-child th:first-child,
.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child {
  border-top-left-radius: 1px;
}
.panel > .table:first-child > thead:first-child > tr:first-child td:last-child,
.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child,
.panel > .table:first-child > tbody:first-child > tr:first-child td:last-child,
.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child,
.panel > .table:first-child > thead:first-child > tr:first-child th:last-child,
.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child,
.panel > .table:first-child > tbody:first-child > tr:first-child th:last-child,
.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child {
  border-top-right-radius: 1px;
}
.panel > .table:last-child,
.panel > .table-responsive:last-child > .table:last-child {
  border-bottom-right-radius: 1px;
  border-bottom-left-radius: 1px;
}
.panel > .table:last-child > tbody:last-child > tr:last-child,
.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child,
.panel > .table:last-child > tfoot:last-child > tr:last-child,
.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child {
  border-bottom-left-radius: 1px;
  border-bottom-right-radius: 1px;
}
.panel > .table:last-child > tbody:last-child > tr:last-child td:first-child,
.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child,
.panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child,
.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child,
.panel > .table:last-child > tbody:last-child > tr:last-child th:first-child,
.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child,
.panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child,
.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child {
  border-bottom-left-radius: 1px;
}
.panel > .table:last-child > tbody:last-child > tr:last-child td:last-child,
.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child,
.panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child,
.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child,
.panel > .table:last-child > tbody:last-child > tr:last-child th:last-child,
.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child,
.panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child,
.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child {
  border-bottom-right-radius: 1px;
}
.panel > .panel-body + .table,
.panel > .panel-body + .table-responsive,
.panel > .table + .panel-body,
.panel > .table-responsive + .panel-body {
  border-top: 1px solid #ddd;
}
.panel > .table > tbody:first-child > tr:first-child th,
.panel > .table > tbody:first-child > tr:first-child td {
  border-top: 0;
}
.panel > .table-bordered,
.panel > .table-responsive > .table-bordered {
  border: 0;
}
.panel > .table-bordered > thead > tr > th:first-child,
.panel > .table-responsive > .table-bordered > thead > tr > th:first-child,
.panel > .table-bordered > tbody > tr > th:first-child,
.panel > .table-responsive > .table-bordered > tbody > tr > th:first-child,
.panel > .table-bordered > tfoot > tr > th:first-child,
.panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child,
.panel > .table-bordered > thead > tr > td:first-child,
.panel > .table-responsive > .table-bordered > thead > tr > td:first-child,
.panel > .table-bordered > tbody > tr > td:first-child,
.panel > .table-responsive > .table-bordered > tbody > tr > td:first-child,
.panel > .table-bordered > tfoot > tr > td:first-child,
.panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child {
  border-left: 0;
}
.panel > .table-bordered > thead > tr > th:last-child,
.panel > .table-responsive > .table-bordered > thead > tr > th:last-child,
.panel > .table-bordered > tbody > tr > th:last-child,
.panel > .table-responsive > .table-bordered > tbody > tr > th:last-child,
.panel > .table-bordered > tfoot > tr > th:last-child,
.panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child,
.panel > .table-bordered > thead > tr > td:last-child,
.panel > .table-responsive > .table-bordered > thead > tr > td:last-child,
.panel > .table-bordered > tbody > tr > td:last-child,
.panel > .table-responsive > .table-bordered > tbody > tr > td:last-child,
.panel > .table-bordered > tfoot > tr > td:last-child,
.panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child {
  border-right: 0;
}
.panel > .table-bordered > thead > tr:first-child > td,
.panel > .table-responsive > .table-bordered > thead > tr:first-child > td,
.panel > .table-bordered > tbody > tr:first-child > td,
.panel > .table-responsive > .table-bordered > tbody > tr:first-child > td,
.panel > .table-bordered > thead > tr:first-child > th,
.panel > .table-responsive > .table-bordered > thead > tr:first-child > th,
.panel > .table-bordered > tbody > tr:first-child > th,
.panel > .table-responsive > .table-bordered > tbody > tr:first-child > th {
  border-bottom: 0;
}
.panel > .table-bordered > tbody > tr:last-child > td,
.panel > .table-responsive > .table-bordered > tbody > tr:last-child > td,
.panel > .table-bordered > tfoot > tr:last-child > td,
.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td,
.panel > .table-bordered > tbody > tr:last-child > th,
.panel > .table-responsive > .table-bordered > tbody > tr:last-child > th,
.panel > .table-bordered > tfoot > tr:last-child > th,
.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th {
  border-bottom: 0;
}
.panel > .table-responsive {
  border: 0;
  margin-bottom: 0;
}
.panel-group {
  margin-bottom: 18px;
}
.panel-group .panel {
  margin-bottom: 0;
  border-radius: 2px;
}
.panel-group .panel + .panel {
  margin-top: 5px;
}
.panel-group .panel-heading {
  border-bottom: 0;
}
.panel-group .panel-heading + .panel-collapse > .panel-body,
.panel-group .panel-heading + .panel-collapse > .list-group {
  border-top: 1px solid #ddd;
}
.panel-group .panel-footer {
  border-top: 0;
}
.panel-group .panel-footer + .panel-collapse .panel-body {
  border-bottom: 1px solid #ddd;
}
.panel-default {
  border-color: #ddd;
}
.panel-default > .panel-heading {
  color: #333333;
  background-color: #f5f5f5;
  border-color: #ddd;
}
.panel-default > .panel-heading + .panel-collapse > .panel-body {
  border-top-color: #ddd;
}
.panel-default > .panel-heading .badge {
  color: #f5f5f5;
  background-color: #333333;
}
.panel-default > .panel-footer + .panel-collapse > .panel-body {
  border-bottom-color: #ddd;
}
.panel-primary {
  border-color: #337ab7;
}
.panel-primary > .panel-heading {
  color: #fff;
  background-color: #337ab7;
  border-color: #337ab7;
}
.panel-primary > .panel-heading + .panel-collapse > .panel-body {
  border-top-color: #337ab7;
}
.panel-primary > .panel-heading .badge {
  color: #337ab7;
  background-color: #fff;
}
.panel-primary > .panel-footer + .panel-collapse > .panel-body {
  border-bottom-color: #337ab7;
}
.panel-success {
  border-color: #d6e9c6;
}
.panel-success > .panel-heading {
  color: #3c763d;
  background-color: #dff0d8;
  border-color: #d6e9c6;
}
.panel-success > .panel-heading + .panel-collapse > .panel-body {
  border-top-color: #d6e9c6;
}
.panel-success > .panel-heading .badge {
  color: #dff0d8;
  background-color: #3c763d;
}
.panel-success > .panel-footer + .panel-collapse > .panel-body {
  border-bottom-color: #d6e9c6;
}
.panel-info {
  border-color: #bce8f1;
}
.panel-info > .panel-heading {
  color: #31708f;
  background-color: #d9edf7;
  border-color: #bce8f1;
}
.panel-info > .panel-heading + .panel-collapse > .panel-body {
  border-top-color: #bce8f1;
}
.panel-info > .panel-heading .badge {
  color: #d9edf7;
  background-color: #31708f;
}
.panel-info > .panel-footer + .panel-collapse > .panel-body {
  border-bottom-color: #bce8f1;
}
.panel-warning {
  border-color: #faebcc;
}
.panel-warning > .panel-heading {
  color: #8a6d3b;
  background-color: #fcf8e3;
  border-color: #faebcc;
}
.panel-warning > .panel-heading + .panel-collapse > .panel-body {
  border-top-color: #faebcc;
}
.panel-warning > .panel-heading .badge {
  color: #fcf8e3;
  background-color: #8a6d3b;
}
.panel-warning > .panel-footer + .panel-collapse > .panel-body {
  border-bottom-color: #faebcc;
}
.panel-danger {
  border-color: #ebccd1;
}
.panel-danger > .panel-heading {
  color: #a94442;
  background-color: #f2dede;
  border-color: #ebccd1;
}
.panel-danger > .panel-heading + .panel-collapse > .panel-body {
  border-top-color: #ebccd1;
}
.panel-danger > .panel-heading .badge {
  color: #f2dede;
  background-color: #a94442;
}
.panel-danger > .panel-footer + .panel-collapse > .panel-body {
  border-bottom-color: #ebccd1;
}
.embed-responsive {
  position: relative;
  display: block;
  height: 0;
  padding: 0;
  overflow: hidden;
}
.embed-responsive .embed-responsive-item,
.embed-responsive iframe,
.embed-responsive embed,
.embed-responsive object,
.embed-responsive video {
  position: absolute;
  top: 0;
  left: 0;
  bottom: 0;
  height: 100%;
  width: 100%;
  border: 0;
}
.embed-responsive-16by9 {
  padding-bottom: 56.25%;
}
.embed-responsive-4by3 {
  padding-bottom: 75%;
}
.well {
  min-height: 20px;
  padding: 19px;
  margin-bottom: 20px;
  background-color: #f5f5f5;
  border: 1px solid #e3e3e3;
  border-radius: 2px;
  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
}
.well blockquote {
  border-color: #ddd;
  border-color: rgba(0, 0, 0, 0.15);
}
.well-lg {
  padding: 24px;
  border-radius: 3px;
}
.well-sm {
  padding: 9px;
  border-radius: 1px;
}
.close {
  float: right;
  font-size: 19.5px;
  font-weight: bold;
  line-height: 1;
  color: #000;
  text-shadow: 0 1px 0 #fff;
  opacity: 0.2;
  filter: alpha(opacity=20);
}
.close:hover,
.close:focus {
  color: #000;
  text-decoration: none;
  cursor: pointer;
  opacity: 0.5;
  filter: alpha(opacity=50);
}
button.close {
  padding: 0;
  cursor: pointer;
  background: transparent;
  border: 0;
  -webkit-appearance: none;
}
.modal-open {
  overflow: hidden;
}
.modal {
  display: none;
  overflow: hidden;
  position: fixed;
  top: 0;
  right: 0;
  bottom: 0;
  left: 0;
  z-index: 1050;
  -webkit-overflow-scrolling: touch;
  outline: 0;
}
.modal.fade .modal-dialog {
  -webkit-transform: translate(0, -25%);
  -ms-transform: translate(0, -25%);
  -o-transform: translate(0, -25%);
  transform: translate(0, -25%);
  -webkit-transition: -webkit-transform 0.3s ease-out;
  -moz-transition: -moz-transform 0.3s ease-out;
  -o-transition: -o-transform 0.3s ease-out;
  transition: transform 0.3s ease-out;
}
.modal.in .modal-dialog {
  -webkit-transform: translate(0, 0);
  -ms-transform: translate(0, 0);
  -o-transform: translate(0, 0);
  transform: translate(0, 0);
}
.modal-open .modal {
  overflow-x: hidden;
  overflow-y: auto;
}
.modal-dialog {
  position: relative;
  width: auto;
  margin: 10px;
}
.modal-content {
  position: relative;
  background-color: #fff;
  border: 1px solid #999;
  border: 1px solid rgba(0, 0, 0, 0.2);
  border-radius: 3px;
  -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);
  box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);
  background-clip: padding-box;
  outline: 0;
}
.modal-backdrop {
  position: fixed;
  top: 0;
  right: 0;
  bottom: 0;
  left: 0;
  z-index: 1040;
  background-color: #000;
}
.modal-backdrop.fade {
  opacity: 0;
  filter: alpha(opacity=0);
}
.modal-backdrop.in {
  opacity: 0.5;
  filter: alpha(opacity=50);
}
.modal-header {
  padding: 15px;
  border-bottom: 1px solid #e5e5e5;
}
.modal-header .close {
  margin-top: -2px;
}
.modal-title {
  margin: 0;
  line-height: 1.42857143;
}
.modal-body {
  position: relative;
  padding: 15px;
}
.modal-footer {
  padding: 15px;
  text-align: right;
  border-top: 1px solid #e5e5e5;
}
.modal-footer .btn + .btn {
  margin-left: 5px;
  margin-bottom: 0;
}
.modal-footer .btn-group .btn + .btn {
  margin-left: -1px;
}
.modal-footer .btn-block + .btn-block {
  margin-left: 0;
}
.modal-scrollbar-measure {
  position: absolute;
  top: -9999px;
  width: 50px;
  height: 50px;
  overflow: scroll;
}
@media (min-width: 768px) {
  .modal-dialog {
    width: 600px;
    margin: 30px auto;
  }
  .modal-content {
    -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);
    box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);
  }
  .modal-sm {
    width: 300px;
  }
}
@media (min-width: 992px) {
  .modal-lg {
    width: 900px;
  }
}
.tooltip {
  position: absolute;
  z-index: 1070;
  display: block;
  font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
  font-style: normal;
  font-weight: normal;
  letter-spacing: normal;
  line-break: auto;
  line-height: 1.42857143;
  text-align: left;
  text-align: start;
  text-decoration: none;
  text-shadow: none;
  text-transform: none;
  white-space: normal;
  word-break: normal;
  word-spacing: normal;
  word-wrap: normal;
  font-size: 12px;
  opacity: 0;
  filter: alpha(opacity=0);
}
.tooltip.in {
  opacity: 0.9;
  filter: alpha(opacity=90);
}
.tooltip.top {
  margin-top: -3px;
  padding: 5px 0;
}
.tooltip.right {
  margin-left: 3px;
  padding: 0 5px;
}
.tooltip.bottom {
  margin-top: 3px;
  padding: 5px 0;
}
.tooltip.left {
  margin-left: -3px;
  padding: 0 5px;
}
.tooltip-inner {
  max-width: 200px;
  padding: 3px 8px;
  color: #fff;
  text-align: center;
  background-color: #000;
  border-radius: 2px;
}
.tooltip-arrow {
  position: absolute;
  width: 0;
  height: 0;
  border-color: transparent;
  border-style: solid;
}
.tooltip.top .tooltip-arrow {
  bottom: 0;
  left: 50%;
  margin-left: -5px;
  border-width: 5px 5px 0;
  border-top-color: #000;
}
.tooltip.top-left .tooltip-arrow {
  bottom: 0;
  right: 5px;
  margin-bottom: -5px;
  border-width: 5px 5px 0;
  border-top-color: #000;
}
.tooltip.top-right .tooltip-arrow {
  bottom: 0;
  left: 5px;
  margin-bottom: -5px;
  border-width: 5px 5px 0;
  border-top-color: #000;
}
.tooltip.right .tooltip-arrow {
  top: 50%;
  left: 0;
  margin-top: -5px;
  border-width: 5px 5px 5px 0;
  border-right-color: #000;
}
.tooltip.left .tooltip-arrow {
  top: 50%;
  right: 0;
  margin-top: -5px;
  border-width: 5px 0 5px 5px;
  border-left-color: #000;
}
.tooltip.bottom .tooltip-arrow {
  top: 0;
  left: 50%;
  margin-left: -5px;
  border-width: 0 5px 5px;
  border-bottom-color: #000;
}
.tooltip.bottom-left .tooltip-arrow {
  top: 0;
  right: 5px;
  margin-top: -5px;
  border-width: 0 5px 5px;
  border-bottom-color: #000;
}
.tooltip.bottom-right .tooltip-arrow {
  top: 0;
  left: 5px;
  margin-top: -5px;
  border-width: 0 5px 5px;
  border-bottom-color: #000;
}
.popover {
  position: absolute;
  top: 0;
  left: 0;
  z-index: 1060;
  display: none;
  max-width: 276px;
  padding: 1px;
  font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
  font-style: normal;
  font-weight: normal;
  letter-spacing: normal;
  line-break: auto;
  line-height: 1.42857143;
  text-align: left;
  text-align: start;
  text-decoration: none;
  text-shadow: none;
  text-transform: none;
  white-space: normal;
  word-break: normal;
  word-spacing: normal;
  word-wrap: normal;
  font-size: 13px;
  background-color: #fff;
  background-clip: padding-box;
  border: 1px solid #ccc;
  border: 1px solid rgba(0, 0, 0, 0.2);
  border-radius: 3px;
  -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
  box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
}
.popover.top {
  margin-top: -10px;
}
.popover.right {
  margin-left: 10px;
}
.popover.bottom {
  margin-top: 10px;
}
.popover.left {
  margin-left: -10px;
}
.popover-title {
  margin: 0;
  padding: 8px 14px;
  font-size: 13px;
  background-color: #f7f7f7;
  border-bottom: 1px solid #ebebeb;
  border-radius: 2px 2px 0 0;
}
.popover-content {
  padding: 9px 14px;
}
.popover > .arrow,
.popover > .arrow:after {
  position: absolute;
  display: block;
  width: 0;
  height: 0;
  border-color: transparent;
  border-style: solid;
}
.popover > .arrow {
  border-width: 11px;
}
.popover > .arrow:after {
  border-width: 10px;
  content: "";
}
.popover.top > .arrow {
  left: 50%;
  margin-left: -11px;
  border-bottom-width: 0;
  border-top-color: #999999;
  border-top-color: rgba(0, 0, 0, 0.25);
  bottom: -11px;
}
.popover.top > .arrow:after {
  content: " ";
  bottom: 1px;
  margin-left: -10px;
  border-bottom-width: 0;
  border-top-color: #fff;
}
.popover.right > .arrow {
  top: 50%;
  left: -11px;
  margin-top: -11px;
  border-left-width: 0;
  border-right-color: #999999;
  border-right-color: rgba(0, 0, 0, 0.25);
}
.popover.right > .arrow:after {
  content: " ";
  left: 1px;
  bottom: -10px;
  border-left-width: 0;
  border-right-color: #fff;
}
.popover.bottom > .arrow {
  left: 50%;
  margin-left: -11px;
  border-top-width: 0;
  border-bottom-color: #999999;
  border-bottom-color: rgba(0, 0, 0, 0.25);
  top: -11px;
}
.popover.bottom > .arrow:after {
  content: " ";
  top: 1px;
  margin-left: -10px;
  border-top-width: 0;
  border-bottom-color: #fff;
}
.popover.left > .arrow {
  top: 50%;
  right: -11px;
  margin-top: -11px;
  border-right-width: 0;
  border-left-color: #999999;
  border-left-color: rgba(0, 0, 0, 0.25);
}
.popover.left > .arrow:after {
  content: " ";
  right: 1px;
  border-right-width: 0;
  border-left-color: #fff;
  bottom: -10px;
}
.carousel {
  position: relative;
}
.carousel-inner {
  position: relative;
  overflow: hidden;
  width: 100%;
}
.carousel-inner > .item {
  display: none;
  position: relative;
  -webkit-transition: 0.6s ease-in-out left;
  -o-transition: 0.6s ease-in-out left;
  transition: 0.6s ease-in-out left;
}
.carousel-inner > .item > img,
.carousel-inner > .item > a > img {
  line-height: 1;
}
@media all and (transform-3d), (-webkit-transform-3d) {
  .carousel-inner > .item {
    -webkit-transition: -webkit-transform 0.6s ease-in-out;
    -moz-transition: -moz-transform 0.6s ease-in-out;
    -o-transition: -o-transform 0.6s ease-in-out;
    transition: transform 0.6s ease-in-out;
    -webkit-backface-visibility: hidden;
    -moz-backface-visibility: hidden;
    backface-visibility: hidden;
    -webkit-perspective: 1000px;
    -moz-perspective: 1000px;
    perspective: 1000px;
  }
  .carousel-inner > .item.next,
  .carousel-inner > .item.active.right {
    -webkit-transform: translate3d(100%, 0, 0);
    transform: translate3d(100%, 0, 0);
    left: 0;
  }
  .carousel-inner > .item.prev,
  .carousel-inner > .item.active.left {
    -webkit-transform: translate3d(-100%, 0, 0);
    transform: translate3d(-100%, 0, 0);
    left: 0;
  }
  .carousel-inner > .item.next.left,
  .carousel-inner > .item.prev.right,
  .carousel-inner > .item.active {
    -webkit-transform: translate3d(0, 0, 0);
    transform: translate3d(0, 0, 0);
    left: 0;
  }
}
.carousel-inner > .active,
.carousel-inner > .next,
.carousel-inner > .prev {
  display: block;
}
.carousel-inner > .active {
  left: 0;
}
.carousel-inner > .next,
.carousel-inner > .prev {
  position: absolute;
  top: 0;
  width: 100%;
}
.carousel-inner > .next {
  left: 100%;
}
.carousel-inner > .prev {
  left: -100%;
}
.carousel-inner > .next.left,
.carousel-inner > .prev.right {
  left: 0;
}
.carousel-inner > .active.left {
  left: -100%;
}
.carousel-inner > .active.right {
  left: 100%;
}
.carousel-control {
  position: absolute;
  top: 0;
  left: 0;
  bottom: 0;
  width: 15%;
  opacity: 0.5;
  filter: alpha(opacity=50);
  font-size: 20px;
  color: #fff;
  text-align: center;
  text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6);
  background-color: rgba(0, 0, 0, 0);
}
.carousel-control.left {
  background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);
  background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);
  background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);
  background-repeat: repeat-x;
  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);
}
.carousel-control.right {
  left: auto;
  right: 0;
  background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);
  background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);
  background-image: linear-gradient(to right, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);
  background-repeat: repeat-x;
  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);
}
.carousel-control:hover,
.carousel-control:focus {
  outline: 0;
  color: #fff;
  text-decoration: none;
  opacity: 0.9;
  filter: alpha(opacity=90);
}
.carousel-control .icon-prev,
.carousel-control .icon-next,
.carousel-control .glyphicon-chevron-left,
.carousel-control .glyphicon-chevron-right {
  position: absolute;
  top: 50%;
  margin-top: -10px;
  z-index: 5;
  display: inline-block;
}
.carousel-control .icon-prev,
.carousel-control .glyphicon-chevron-left {
  left: 50%;
  margin-left: -10px;
}
.carousel-control .icon-next,
.carousel-control .glyphicon-chevron-right {
  right: 50%;
  margin-right: -10px;
}
.carousel-control .icon-prev,
.carousel-control .icon-next {
  width: 20px;
  height: 20px;
  line-height: 1;
  font-family: serif;
}
.carousel-control .icon-prev:before {
  content: '\2039';
}
.carousel-control .icon-next:before {
  content: '\203a';
}
.carousel-indicators {
  position: absolute;
  bottom: 10px;
  left: 50%;
  z-index: 15;
  width: 60%;
  margin-left: -30%;
  padding-left: 0;
  list-style: none;
  text-align: center;
}
.carousel-indicators li {
  display: inline-block;
  width: 10px;
  height: 10px;
  margin: 1px;
  text-indent: -999px;
  border: 1px solid #fff;
  border-radius: 10px;
  cursor: pointer;
  background-color: #000 \9;
  background-color: rgba(0, 0, 0, 0);
}
.carousel-indicators .active {
  margin: 0;
  width: 12px;
  height: 12px;
  background-color: #fff;
}
.carousel-caption {
  position: absolute;
  left: 15%;
  right: 15%;
  bottom: 20px;
  z-index: 10;
  padding-top: 20px;
  padding-bottom: 20px;
  color: #fff;
  text-align: center;
  text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6);
}
.carousel-caption .btn {
  text-shadow: none;
}
@media screen and (min-width: 768px) {
  .carousel-control .glyphicon-chevron-left,
  .carousel-control .glyphicon-chevron-right,
  .carousel-control .icon-prev,
  .carousel-control .icon-next {
    width: 30px;
    height: 30px;
    margin-top: -10px;
    font-size: 30px;
  }
  .carousel-control .glyphicon-chevron-left,
  .carousel-control .icon-prev {
    margin-left: -10px;
  }
  .carousel-control .glyphicon-chevron-right,
  .carousel-control .icon-next {
    margin-right: -10px;
  }
  .carousel-caption {
    left: 20%;
    right: 20%;
    padding-bottom: 30px;
  }
  .carousel-indicators {
    bottom: 20px;
  }
}
.clearfix:before,
.clearfix:after,
.dl-horizontal dd:before,
.dl-horizontal dd:after,
.container:before,
.container:after,
.container-fluid:before,
.container-fluid:after,
.row:before,
.row:after,
.form-horizontal .form-group:before,
.form-horizontal .form-group:after,
.btn-toolbar:before,
.btn-toolbar:after,
.btn-group-vertical > .btn-group:before,
.btn-group-vertical > .btn-group:after,
.nav:before,
.nav:after,
.navbar:before,
.navbar:after,
.navbar-header:before,
.navbar-header:after,
.navbar-collapse:before,
.navbar-collapse:after,
.pager:before,
.pager:after,
.panel-body:before,
.panel-body:after,
.modal-header:before,
.modal-header:after,
.modal-footer:before,
.modal-footer:after,
.item_buttons:before,
.item_buttons:after {
  content: " ";
  display: table;
}
.clearfix:after,
.dl-horizontal dd:after,
.container:after,
.container-fluid:after,
.row:after,
.form-horizontal .form-group:after,
.btn-toolbar:after,
.btn-group-vertical > .btn-group:after,
.nav:after,
.navbar:after,
.navbar-header:after,
.navbar-collapse:after,
.pager:after,
.panel-body:after,
.modal-header:after,
.modal-footer:after,
.item_buttons:after {
  clear: both;
}
.center-block {
  display: block;
  margin-left: auto;
  margin-right: auto;
}
.pull-right {
  float: right !important;
}
.pull-left {
  float: left !important;
}
.hide {
  display: none !important;
}
.show {
  display: block !important;
}
.invisible {
  visibility: hidden;
}
.text-hide {
  font: 0/0 a;
  color: transparent;
  text-shadow: none;
  background-color: transparent;
  border: 0;
}
.hidden {
  display: none !important;
}
.affix {
  position: fixed;
}
@-ms-viewport {
  width: device-width;
}
.visible-xs,
.visible-sm,
.visible-md,
.visible-lg {
  display: none !important;
}
.visible-xs-block,
.visible-xs-inline,
.visible-xs-inline-block,
.visible-sm-block,
.visible-sm-inline,
.visible-sm-inline-block,
.visible-md-block,
.visible-md-inline,
.visible-md-inline-block,
.visible-lg-block,
.visible-lg-inline,
.visible-lg-inline-block {
  display: none !important;
}
@media (max-width: 767px) {
  .visible-xs {
    display: block !important;
  }
  table.visible-xs {
    display: table !important;
  }
  tr.visible-xs {
    display: table-row !important;
  }
  th.visible-xs,
  td.visible-xs {
    display: table-cell !important;
  }
}
@media (max-width: 767px) {
  .visible-xs-block {
    display: block !important;
  }
}
@media (max-width: 767px) {
  .visible-xs-inline {
    display: inline !important;
  }
}
@media (max-width: 767px) {
  .visible-xs-inline-block {
    display: inline-block !important;
  }
}
@media (min-width: 768px) and (max-width: 991px) {
  .visible-sm {
    display: block !important;
  }
  table.visible-sm {
    display: table !important;
  }
  tr.visible-sm {
    display: table-row !important;
  }
  th.visible-sm,
  td.visible-sm {
    display: table-cell !important;
  }
}
@media (min-width: 768px) and (max-width: 991px) {
  .visible-sm-block {
    display: block !important;
  }
}
@media (min-width: 768px) and (max-width: 991px) {
  .visible-sm-inline {
    display: inline !important;
  }
}
@media (min-width: 768px) and (max-width: 991px) {
  .visible-sm-inline-block {
    display: inline-block !important;
  }
}
@media (min-width: 992px) and (max-width: 1199px) {
  .visible-md {
    display: block !important;
  }
  table.visible-md {
    display: table !important;
  }
  tr.visible-md {
    display: table-row !important;
  }
  th.visible-md,
  td.visible-md {
    display: table-cell !important;
  }
}
@media (min-width: 992px) and (max-width: 1199px) {
  .visible-md-block {
    display: block !important;
  }
}
@media (min-width: 992px) and (max-width: 1199px) {
  .visible-md-inline {
    display: inline !important;
  }
}
@media (min-width: 992px) and (max-width: 1199px) {
  .visible-md-inline-block {
    display: inline-block !important;
  }
}
@media (min-width: 1200px) {
  .visible-lg {
    display: block !important;
  }
  table.visible-lg {
    display: table !important;
  }
  tr.visible-lg {
    display: table-row !important;
  }
  th.visible-lg,
  td.visible-lg {
    display: table-cell !important;
  }
}
@media (min-width: 1200px) {
  .visible-lg-block {
    display: block !important;
  }
}
@media (min-width: 1200px) {
  .visible-lg-inline {
    display: inline !important;
  }
}
@media (min-width: 1200px) {
  .visible-lg-inline-block {
    display: inline-block !important;
  }
}
@media (max-width: 767px) {
  .hidden-xs {
    display: none !important;
  }
}
@media (min-width: 768px) and (max-width: 991px) {
  .hidden-sm {
    display: none !important;
  }
}
@media (min-width: 992px) and (max-width: 1199px) {
  .hidden-md {
    display: none !important;
  }
}
@media (min-width: 1200px) {
  .hidden-lg {
    display: none !important;
  }
}
.visible-print {
  display: none !important;
}
@media print {
  .visible-print {
    display: block !important;
  }
  table.visible-print {
    display: table !important;
  }
  tr.visible-print {
    display: table-row !important;
  }
  th.visible-print,
  td.visible-print {
    display: table-cell !important;
  }
}
.visible-print-block {
  display: none !important;
}
@media print {
  .visible-print-block {
    display: block !important;
  }
}
.visible-print-inline {
  display: none !important;
}
@media print {
  .visible-print-inline {
    display: inline !important;
  }
}
.visible-print-inline-block {
  display: none !important;
}
@media print {
  .visible-print-inline-block {
    display: inline-block !important;
  }
}
@media print {
  .hidden-print {
    display: none !important;
  }
}
/*!
*
* Font Awesome
*
*/
/*!
 *  Font Awesome 4.2.0 by @davegandy - http://fontawesome.io - @fontawesome
 *  License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
 */
/* FONT PATH
 * -------------------------- */
@font-face {
  font-family: 'FontAwesome';
  src: url('../components/font-awesome/fonts/fontawesome-webfont.eot?v=4.2.0');
  src: url('../components/font-awesome/fonts/fontawesome-webfont.eot?#iefix&v=4.2.0') format('embedded-opentype'), url('../components/font-awesome/fonts/fontawesome-webfont.woff?v=4.2.0') format('woff'), url('../components/font-awesome/fonts/fontawesome-webfont.ttf?v=4.2.0') format('truetype'), url('../components/font-awesome/fonts/fontawesome-webfont.svg?v=4.2.0#fontawesomeregular') format('svg');
  font-weight: normal;
  font-style: normal;
}
.fa {
  display: inline-block;
  font: normal normal normal 14px/1 FontAwesome;
  font-size: inherit;
  text-rendering: auto;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
}
/* makes the font 33% larger relative to the icon container */
.fa-lg {
  font-size: 1.33333333em;
  line-height: 0.75em;
  vertical-align: -15%;
}
.fa-2x {
  font-size: 2em;
}
.fa-3x {
  font-size: 3em;
}
.fa-4x {
  font-size: 4em;
}
.fa-5x {
  font-size: 5em;
}
.fa-fw {
  width: 1.28571429em;
  text-align: center;
}
.fa-ul {
  padding-left: 0;
  margin-left: 2.14285714em;
  list-style-type: none;
}
.fa-ul > li {
  position: relative;
}
.fa-li {
  position: absolute;
  left: -2.14285714em;
  width: 2.14285714em;
  top: 0.14285714em;
  text-align: center;
}
.fa-li.fa-lg {
  left: -1.85714286em;
}
.fa-border {
  padding: .2em .25em .15em;
  border: solid 0.08em #eee;
  border-radius: .1em;
}
.pull-right {
  float: right;
}
.pull-left {
  float: left;
}
.fa.pull-left {
  margin-right: .3em;
}
.fa.pull-right {
  margin-left: .3em;
}
.fa-spin {
  -webkit-animation: fa-spin 2s infinite linear;
  animation: fa-spin 2s infinite linear;
}
@-webkit-keyframes fa-spin {
  0% {
    -webkit-transform: rotate(0deg);
    transform: rotate(0deg);
  }
  100% {
    -webkit-transform: rotate(359deg);
    transform: rotate(359deg);
  }
}
@keyframes fa-spin {
  0% {
    -webkit-transform: rotate(0deg);
    transform: rotate(0deg);
  }
  100% {
    -webkit-transform: rotate(359deg);
    transform: rotate(359deg);
  }
}
.fa-rotate-90 {
  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=1);
  -webkit-transform: rotate(90deg);
  -ms-transform: rotate(90deg);
  transform: rotate(90deg);
}
.fa-rotate-180 {
  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2);
  -webkit-transform: rotate(180deg);
  -ms-transform: rotate(180deg);
  transform: rotate(180deg);
}
.fa-rotate-270 {
  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3);
  -webkit-transform: rotate(270deg);
  -ms-transform: rotate(270deg);
  transform: rotate(270deg);
}
.fa-flip-horizontal {
  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1);
  -webkit-transform: scale(-1, 1);
  -ms-transform: scale(-1, 1);
  transform: scale(-1, 1);
}
.fa-flip-vertical {
  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1);
  -webkit-transform: scale(1, -1);
  -ms-transform: scale(1, -1);
  transform: scale(1, -1);
}
:root .fa-rotate-90,
:root .fa-rotate-180,
:root .fa-rotate-270,
:root .fa-flip-horizontal,
:root .fa-flip-vertical {
  filter: none;
}
.fa-stack {
  position: relative;
  display: inline-block;
  width: 2em;
  height: 2em;
  line-height: 2em;
  vertical-align: middle;
}
.fa-stack-1x,
.fa-stack-2x {
  position: absolute;
  left: 0;
  width: 100%;
  text-align: center;
}
.fa-stack-1x {
  line-height: inherit;
}
.fa-stack-2x {
  font-size: 2em;
}
.fa-inverse {
  color: #fff;
}
/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen
   readers do not read off random characters that represent icons */
.fa-glass:before {
  content: "\f000";
}
.fa-music:before {
  content: "\f001";
}
.fa-search:before {
  content: "\f002";
}
.fa-envelope-o:before {
  content: "\f003";
}
.fa-heart:before {
  content: "\f004";
}
.fa-star:before {
  content: "\f005";
}
.fa-star-o:before {
  content: "\f006";
}
.fa-user:before {
  content: "\f007";
}
.fa-film:before {
  content: "\f008";
}
.fa-th-large:before {
  content: "\f009";
}
.fa-th:before {
  content: "\f00a";
}
.fa-th-list:before {
  content: "\f00b";
}
.fa-check:before {
  content: "\f00c";
}
.fa-remove:before,
.fa-close:before,
.fa-times:before {
  content: "\f00d";
}
.fa-search-plus:before {
  content: "\f00e";
}
.fa-search-minus:before {
  content: "\f010";
}
.fa-power-off:before {
  content: "\f011";
}
.fa-signal:before {
  content: "\f012";
}
.fa-gear:before,
.fa-cog:before {
  content: "\f013";
}
.fa-trash-o:before {
  content: "\f014";
}
.fa-home:before {
  content: "\f015";
}
.fa-file-o:before {
  content: "\f016";
}
.fa-clock-o:before {
  content: "\f017";
}
.fa-road:before {
  content: "\f018";
}
.fa-download:before {
  content: "\f019";
}
.fa-arrow-circle-o-down:before {
  content: "\f01a";
}
.fa-arrow-circle-o-up:before {
  content: "\f01b";
}
.fa-inbox:before {
  content: "\f01c";
}
.fa-play-circle-o:before {
  content: "\f01d";
}
.fa-rotate-right:before,
.fa-repeat:before {
  content: "\f01e";
}
.fa-refresh:before {
  content: "\f021";
}
.fa-list-alt:before {
  content: "\f022";
}
.fa-lock:before {
  content: "\f023";
}
.fa-flag:before {
  content: "\f024";
}
.fa-headphones:before {
  content: "\f025";
}
.fa-volume-off:before {
  content: "\f026";
}
.fa-volume-down:before {
  content: "\f027";
}
.fa-volume-up:before {
  content: "\f028";
}
.fa-qrcode:before {
  content: "\f029";
}
.fa-barcode:before {
  content: "\f02a";
}
.fa-tag:before {
  content: "\f02b";
}
.fa-tags:before {
  content: "\f02c";
}
.fa-book:before {
  content: "\f02d";
}
.fa-bookmark:before {
  content: "\f02e";
}
.fa-print:before {
  content: "\f02f";
}
.fa-camera:before {
  content: "\f030";
}
.fa-font:before {
  content: "\f031";
}
.fa-bold:before {
  content: "\f032";
}
.fa-italic:before {
  content: "\f033";
}
.fa-text-height:before {
  content: "\f034";
}
.fa-text-width:before {
  content: "\f035";
}
.fa-align-left:before {
  content: "\f036";
}
.fa-align-center:before {
  content: "\f037";
}
.fa-align-right:before {
  content: "\f038";
}
.fa-align-justify:before {
  content: "\f039";
}
.fa-list:before {
  content: "\f03a";
}
.fa-dedent:before,
.fa-outdent:before {
  content: "\f03b";
}
.fa-indent:before {
  content: "\f03c";
}
.fa-video-camera:before {
  content: "\f03d";
}
.fa-photo:before,
.fa-image:before,
.fa-picture-o:before {
  content: "\f03e";
}
.fa-pencil:before {
  content: "\f040";
}
.fa-map-marker:before {
  content: "\f041";
}
.fa-adjust:before {
  content: "\f042";
}
.fa-tint:before {
  content: "\f043";
}
.fa-edit:before,
.fa-pencil-square-o:before {
  content: "\f044";
}
.fa-share-square-o:before {
  content: "\f045";
}
.fa-check-square-o:before {
  content: "\f046";
}
.fa-arrows:before {
  content: "\f047";
}
.fa-step-backward:before {
  content: "\f048";
}
.fa-fast-backward:before {
  content: "\f049";
}
.fa-backward:before {
  content: "\f04a";
}
.fa-play:before {
  content: "\f04b";
}
.fa-pause:before {
  content: "\f04c";
}
.fa-stop:before {
  content: "\f04d";
}
.fa-forward:before {
  content: "\f04e";
}
.fa-fast-forward:before {
  content: "\f050";
}
.fa-step-forward:before {
  content: "\f051";
}
.fa-eject:before {
  content: "\f052";
}
.fa-chevron-left:before {
  content: "\f053";
}
.fa-chevron-right:before {
  content: "\f054";
}
.fa-plus-circle:before {
  content: "\f055";
}
.fa-minus-circle:before {
  content: "\f056";
}
.fa-times-circle:before {
  content: "\f057";
}
.fa-check-circle:before {
  content: "\f058";
}
.fa-question-circle:before {
  content: "\f059";
}
.fa-info-circle:before {
  content: "\f05a";
}
.fa-crosshairs:before {
  content: "\f05b";
}
.fa-times-circle-o:before {
  content: "\f05c";
}
.fa-check-circle-o:before {
  content: "\f05d";
}
.fa-ban:before {
  content: "\f05e";
}
.fa-arrow-left:before {
  content: "\f060";
}
.fa-arrow-right:before {
  content: "\f061";
}
.fa-arrow-up:before {
  content: "\f062";
}
.fa-arrow-down:before {
  content: "\f063";
}
.fa-mail-forward:before,
.fa-share:before {
  content: "\f064";
}
.fa-expand:before {
  content: "\f065";
}
.fa-compress:before {
  content: "\f066";
}
.fa-plus:before {
  content: "\f067";
}
.fa-minus:before {
  content: "\f068";
}
.fa-asterisk:before {
  content: "\f069";
}
.fa-exclamation-circle:before {
  content: "\f06a";
}
.fa-gift:before {
  content: "\f06b";
}
.fa-leaf:before {
  content: "\f06c";
}
.fa-fire:before {
  content: "\f06d";
}
.fa-eye:before {
  content: "\f06e";
}
.fa-eye-slash:before {
  content: "\f070";
}
.fa-warning:before,
.fa-exclamation-triangle:before {
  content: "\f071";
}
.fa-plane:before {
  content: "\f072";
}
.fa-calendar:before {
  content: "\f073";
}
.fa-random:before {
  content: "\f074";
}
.fa-comment:before {
  content: "\f075";
}
.fa-magnet:before {
  content: "\f076";
}
.fa-chevron-up:before {
  content: "\f077";
}
.fa-chevron-down:before {
  content: "\f078";
}
.fa-retweet:before {
  content: "\f079";
}
.fa-shopping-cart:before {
  content: "\f07a";
}
.fa-folder:before {
  content: "\f07b";
}
.fa-folder-open:before {
  content: "\f07c";
}
.fa-arrows-v:before {
  content: "\f07d";
}
.fa-arrows-h:before {
  content: "\f07e";
}
.fa-bar-chart-o:before,
.fa-bar-chart:before {
  content: "\f080";
}
.fa-twitter-square:before {
  content: "\f081";
}
.fa-facebook-square:before {
  content: "\f082";
}
.fa-camera-retro:before {
  content: "\f083";
}
.fa-key:before {
  content: "\f084";
}
.fa-gears:before,
.fa-cogs:before {
  content: "\f085";
}
.fa-comments:before {
  content: "\f086";
}
.fa-thumbs-o-up:before {
  content: "\f087";
}
.fa-thumbs-o-down:before {
  content: "\f088";
}
.fa-star-half:before {
  content: "\f089";
}
.fa-heart-o:before {
  content: "\f08a";
}
.fa-sign-out:before {
  content: "\f08b";
}
.fa-linkedin-square:before {
  content: "\f08c";
}
.fa-thumb-tack:before {
  content: "\f08d";
}
.fa-external-link:before {
  content: "\f08e";
}
.fa-sign-in:before {
  content: "\f090";
}
.fa-trophy:before {
  content: "\f091";
}
.fa-github-square:before {
  content: "\f092";
}
.fa-upload:before {
  content: "\f093";
}
.fa-lemon-o:before {
  content: "\f094";
}
.fa-phone:before {
  content: "\f095";
}
.fa-square-o:before {
  content: "\f096";
}
.fa-bookmark-o:before {
  content: "\f097";
}
.fa-phone-square:before {
  content: "\f098";
}
.fa-twitter:before {
  content: "\f099";
}
.fa-facebook:before {
  content: "\f09a";
}
.fa-github:before {
  content: "\f09b";
}
.fa-unlock:before {
  content: "\f09c";
}
.fa-credit-card:before {
  content: "\f09d";
}
.fa-rss:before {
  content: "\f09e";
}
.fa-hdd-o:before {
  content: "\f0a0";
}
.fa-bullhorn:before {
  content: "\f0a1";
}
.fa-bell:before {
  content: "\f0f3";
}
.fa-certificate:before {
  content: "\f0a3";
}
.fa-hand-o-right:before {
  content: "\f0a4";
}
.fa-hand-o-left:before {
  content: "\f0a5";
}
.fa-hand-o-up:before {
  content: "\f0a6";
}
.fa-hand-o-down:before {
  content: "\f0a7";
}
.fa-arrow-circle-left:before {
  content: "\f0a8";
}
.fa-arrow-circle-right:before {
  content: "\f0a9";
}
.fa-arrow-circle-up:before {
  content: "\f0aa";
}
.fa-arrow-circle-down:before {
  content: "\f0ab";
}
.fa-globe:before {
  content: "\f0ac";
}
.fa-wrench:before {
  content: "\f0ad";
}
.fa-tasks:before {
  content: "\f0ae";
}
.fa-filter:before {
  content: "\f0b0";
}
.fa-briefcase:before {
  content: "\f0b1";
}
.fa-arrows-alt:before {
  content: "\f0b2";
}
.fa-group:before,
.fa-users:before {
  content: "\f0c0";
}
.fa-chain:before,
.fa-link:before {
  content: "\f0c1";
}
.fa-cloud:before {
  content: "\f0c2";
}
.fa-flask:before {
  content: "\f0c3";
}
.fa-cut:before,
.fa-scissors:before {
  content: "\f0c4";
}
.fa-copy:before,
.fa-files-o:before {
  content: "\f0c5";
}
.fa-paperclip:before {
  content: "\f0c6";
}
.fa-save:before,
.fa-floppy-o:before {
  content: "\f0c7";
}
.fa-square:before {
  content: "\f0c8";
}
.fa-navicon:before,
.fa-reorder:before,
.fa-bars:before {
  content: "\f0c9";
}
.fa-list-ul:before {
  content: "\f0ca";
}
.fa-list-ol:before {
  content: "\f0cb";
}
.fa-strikethrough:before {
  content: "\f0cc";
}
.fa-underline:before {
  content: "\f0cd";
}
.fa-table:before {
  content: "\f0ce";
}
.fa-magic:before {
  content: "\f0d0";
}
.fa-truck:before {
  content: "\f0d1";
}
.fa-pinterest:before {
  content: "\f0d2";
}
.fa-pinterest-square:before {
  content: "\f0d3";
}
.fa-google-plus-square:before {
  content: "\f0d4";
}
.fa-google-plus:before {
  content: "\f0d5";
}
.fa-money:before {
  content: "\f0d6";
}
.fa-caret-down:before {
  content: "\f0d7";
}
.fa-caret-up:before {
  content: "\f0d8";
}
.fa-caret-left:before {
  content: "\f0d9";
}
.fa-caret-right:before {
  content: "\f0da";
}
.fa-columns:before {
  content: "\f0db";
}
.fa-unsorted:before,
.fa-sort:before {
  content: "\f0dc";
}
.fa-sort-down:before,
.fa-sort-desc:before {
  content: "\f0dd";
}
.fa-sort-up:before,
.fa-sort-asc:before {
  content: "\f0de";
}
.fa-envelope:before {
  content: "\f0e0";
}
.fa-linkedin:before {
  content: "\f0e1";
}
.fa-rotate-left:before,
.fa-undo:before {
  content: "\f0e2";
}
.fa-legal:before,
.fa-gavel:before {
  content: "\f0e3";
}
.fa-dashboard:before,
.fa-tachometer:before {
  content: "\f0e4";
}
.fa-comment-o:before {
  content: "\f0e5";
}
.fa-comments-o:before {
  content: "\f0e6";
}
.fa-flash:before,
.fa-bolt:before {
  content: "\f0e7";
}
.fa-sitemap:before {
  content: "\f0e8";
}
.fa-umbrella:before {
  content: "\f0e9";
}
.fa-paste:before,
.fa-clipboard:before {
  content: "\f0ea";
}
.fa-lightbulb-o:before {
  content: "\f0eb";
}
.fa-exchange:before {
  content: "\f0ec";
}
.fa-cloud-download:before {
  content: "\f0ed";
}
.fa-cloud-upload:before {
  content: "\f0ee";
}
.fa-user-md:before {
  content: "\f0f0";
}
.fa-stethoscope:before {
  content: "\f0f1";
}
.fa-suitcase:before {
  content: "\f0f2";
}
.fa-bell-o:before {
  content: "\f0a2";
}
.fa-coffee:before {
  content: "\f0f4";
}
.fa-cutlery:before {
  content: "\f0f5";
}
.fa-file-text-o:before {
  content: "\f0f6";
}
.fa-building-o:before {
  content: "\f0f7";
}
.fa-hospital-o:before {
  content: "\f0f8";
}
.fa-ambulance:before {
  content: "\f0f9";
}
.fa-medkit:before {
  content: "\f0fa";
}
.fa-fighter-jet:before {
  content: "\f0fb";
}
.fa-beer:before {
  content: "\f0fc";
}
.fa-h-square:before {
  content: "\f0fd";
}
.fa-plus-square:before {
  content: "\f0fe";
}
.fa-angle-double-left:before {
  content: "\f100";
}
.fa-angle-double-right:before {
  content: "\f101";
}
.fa-angle-double-up:before {
  content: "\f102";
}
.fa-angle-double-down:before {
  content: "\f103";
}
.fa-angle-left:before {
  content: "\f104";
}
.fa-angle-right:before {
  content: "\f105";
}
.fa-angle-up:before {
  content: "\f106";
}
.fa-angle-down:before {
  content: "\f107";
}
.fa-desktop:before {
  content: "\f108";
}
.fa-laptop:before {
  content: "\f109";
}
.fa-tablet:before {
  content: "\f10a";
}
.fa-mobile-phone:before,
.fa-mobile:before {
  content: "\f10b";
}
.fa-circle-o:before {
  content: "\f10c";
}
.fa-quote-left:before {
  content: "\f10d";
}
.fa-quote-right:before {
  content: "\f10e";
}
.fa-spinner:before {
  content: "\f110";
}
.fa-circle:before {
  content: "\f111";
}
.fa-mail-reply:before,
.fa-reply:before {
  content: "\f112";
}
.fa-github-alt:before {
  content: "\f113";
}
.fa-folder-o:before {
  content: "\f114";
}
.fa-folder-open-o:before {
  content: "\f115";
}
.fa-smile-o:before {
  content: "\f118";
}
.fa-frown-o:before {
  content: "\f119";
}
.fa-meh-o:before {
  content: "\f11a";
}
.fa-gamepad:before {
  content: "\f11b";
}
.fa-keyboard-o:before {
  content: "\f11c";
}
.fa-flag-o:before {
  content: "\f11d";
}
.fa-flag-checkered:before {
  content: "\f11e";
}
.fa-terminal:before {
  content: "\f120";
}
.fa-code:before {
  content: "\f121";
}
.fa-mail-reply-all:before,
.fa-reply-all:before {
  content: "\f122";
}
.fa-star-half-empty:before,
.fa-star-half-full:before,
.fa-star-half-o:before {
  content: "\f123";
}
.fa-location-arrow:before {
  content: "\f124";
}
.fa-crop:before {
  content: "\f125";
}
.fa-code-fork:before {
  content: "\f126";
}
.fa-unlink:before,
.fa-chain-broken:before {
  content: "\f127";
}
.fa-question:before {
  content: "\f128";
}
.fa-info:before {
  content: "\f129";
}
.fa-exclamation:before {
  content: "\f12a";
}
.fa-superscript:before {
  content: "\f12b";
}
.fa-subscript:before {
  content: "\f12c";
}
.fa-eraser:before {
  content: "\f12d";
}
.fa-puzzle-piece:before {
  content: "\f12e";
}
.fa-microphone:before {
  content: "\f130";
}
.fa-microphone-slash:before {
  content: "\f131";
}
.fa-shield:before {
  content: "\f132";
}
.fa-calendar-o:before {
  content: "\f133";
}
.fa-fire-extinguisher:before {
  content: "\f134";
}
.fa-rocket:before {
  content: "\f135";
}
.fa-maxcdn:before {
  content: "\f136";
}
.fa-chevron-circle-left:before {
  content: "\f137";
}
.fa-chevron-circle-right:before {
  content: "\f138";
}
.fa-chevron-circle-up:before {
  content: "\f139";
}
.fa-chevron-circle-down:before {
  content: "\f13a";
}
.fa-html5:before {
  content: "\f13b";
}
.fa-css3:before {
  content: "\f13c";
}
.fa-anchor:before {
  content: "\f13d";
}
.fa-unlock-alt:before {
  content: "\f13e";
}
.fa-bullseye:before {
  content: "\f140";
}
.fa-ellipsis-h:before {
  content: "\f141";
}
.fa-ellipsis-v:before {
  content: "\f142";
}
.fa-rss-square:before {
  content: "\f143";
}
.fa-play-circle:before {
  content: "\f144";
}
.fa-ticket:before {
  content: "\f145";
}
.fa-minus-square:before {
  content: "\f146";
}
.fa-minus-square-o:before {
  content: "\f147";
}
.fa-level-up:before {
  content: "\f148";
}
.fa-level-down:before {
  content: "\f149";
}
.fa-check-square:before {
  content: "\f14a";
}
.fa-pencil-square:before {
  content: "\f14b";
}
.fa-external-link-square:before {
  content: "\f14c";
}
.fa-share-square:before {
  content: "\f14d";
}
.fa-compass:before {
  content: "\f14e";
}
.fa-toggle-down:before,
.fa-caret-square-o-down:before {
  content: "\f150";
}
.fa-toggle-up:before,
.fa-caret-square-o-up:before {
  content: "\f151";
}
.fa-toggle-right:before,
.fa-caret-square-o-right:before {
  content: "\f152";
}
.fa-euro:before,
.fa-eur:before {
  content: "\f153";
}
.fa-gbp:before {
  content: "\f154";
}
.fa-dollar:before,
.fa-usd:before {
  content: "\f155";
}
.fa-rupee:before,
.fa-inr:before {
  content: "\f156";
}
.fa-cny:before,
.fa-rmb:before,
.fa-yen:before,
.fa-jpy:before {
  content: "\f157";
}
.fa-ruble:before,
.fa-rouble:before,
.fa-rub:before {
  content: "\f158";
}
.fa-won:before,
.fa-krw:before {
  content: "\f159";
}
.fa-bitcoin:before,
.fa-btc:before {
  content: "\f15a";
}
.fa-file:before {
  content: "\f15b";
}
.fa-file-text:before {
  content: "\f15c";
}
.fa-sort-alpha-asc:before {
  content: "\f15d";
}
.fa-sort-alpha-desc:before {
  content: "\f15e";
}
.fa-sort-amount-asc:before {
  content: "\f160";
}
.fa-sort-amount-desc:before {
  content: "\f161";
}
.fa-sort-numeric-asc:before {
  content: "\f162";
}
.fa-sort-numeric-desc:before {
  content: "\f163";
}
.fa-thumbs-up:before {
  content: "\f164";
}
.fa-thumbs-down:before {
  content: "\f165";
}
.fa-youtube-square:before {
  content: "\f166";
}
.fa-youtube:before {
  content: "\f167";
}
.fa-xing:before {
  content: "\f168";
}
.fa-xing-square:before {
  content: "\f169";
}
.fa-youtube-play:before {
  content: "\f16a";
}
.fa-dropbox:before {
  content: "\f16b";
}
.fa-stack-overflow:before {
  content: "\f16c";
}
.fa-instagram:before {
  content: "\f16d";
}
.fa-flickr:before {
  content: "\f16e";
}
.fa-adn:before {
  content: "\f170";
}
.fa-bitbucket:before {
  content: "\f171";
}
.fa-bitbucket-square:before {
  content: "\f172";
}
.fa-tumblr:before {
  content: "\f173";
}
.fa-tumblr-square:before {
  content: "\f174";
}
.fa-long-arrow-down:before {
  content: "\f175";
}
.fa-long-arrow-up:before {
  content: "\f176";
}
.fa-long-arrow-left:before {
  content: "\f177";
}
.fa-long-arrow-right:before {
  content: "\f178";
}
.fa-apple:before {
  content: "\f179";
}
.fa-windows:before {
  content: "\f17a";
}
.fa-android:before {
  content: "\f17b";
}
.fa-linux:before {
  content: "\f17c";
}
.fa-dribbble:before {
  content: "\f17d";
}
.fa-skype:before {
  content: "\f17e";
}
.fa-foursquare:before {
  content: "\f180";
}
.fa-trello:before {
  content: "\f181";
}
.fa-female:before {
  content: "\f182";
}
.fa-male:before {
  content: "\f183";
}
.fa-gittip:before {
  content: "\f184";
}
.fa-sun-o:before {
  content: "\f185";
}
.fa-moon-o:before {
  content: "\f186";
}
.fa-archive:before {
  content: "\f187";
}
.fa-bug:before {
  content: "\f188";
}
.fa-vk:before {
  content: "\f189";
}
.fa-weibo:before {
  content: "\f18a";
}
.fa-renren:before {
  content: "\f18b";
}
.fa-pagelines:before {
  content: "\f18c";
}
.fa-stack-exchange:before {
  content: "\f18d";
}
.fa-arrow-circle-o-right:before {
  content: "\f18e";
}
.fa-arrow-circle-o-left:before {
  content: "\f190";
}
.fa-toggle-left:before,
.fa-caret-square-o-left:before {
  content: "\f191";
}
.fa-dot-circle-o:before {
  content: "\f192";
}
.fa-wheelchair:before {
  content: "\f193";
}
.fa-vimeo-square:before {
  content: "\f194";
}
.fa-turkish-lira:before,
.fa-try:before {
  content: "\f195";
}
.fa-plus-square-o:before {
  content: "\f196";
}
.fa-space-shuttle:before {
  content: "\f197";
}
.fa-slack:before {
  content: "\f198";
}
.fa-envelope-square:before {
  content: "\f199";
}
.fa-wordpress:before {
  content: "\f19a";
}
.fa-openid:before {
  content: "\f19b";
}
.fa-institution:before,
.fa-bank:before,
.fa-university:before {
  content: "\f19c";
}
.fa-mortar-board:before,
.fa-graduation-cap:before {
  content: "\f19d";
}
.fa-yahoo:before {
  content: "\f19e";
}
.fa-google:before {
  content: "\f1a0";
}
.fa-reddit:before {
  content: "\f1a1";
}
.fa-reddit-square:before {
  content: "\f1a2";
}
.fa-stumbleupon-circle:before {
  content: "\f1a3";
}
.fa-stumbleupon:before {
  content: "\f1a4";
}
.fa-delicious:before {
  content: "\f1a5";
}
.fa-digg:before {
  content: "\f1a6";
}
.fa-pied-piper:before {
  content: "\f1a7";
}
.fa-pied-piper-alt:before {
  content: "\f1a8";
}
.fa-drupal:before {
  content: "\f1a9";
}
.fa-joomla:before {
  content: "\f1aa";
}
.fa-language:before {
  content: "\f1ab";
}
.fa-fax:before {
  content: "\f1ac";
}
.fa-building:before {
  content: "\f1ad";
}
.fa-child:before {
  content: "\f1ae";
}
.fa-paw:before {
  content: "\f1b0";
}
.fa-spoon:before {
  content: "\f1b1";
}
.fa-cube:before {
  content: "\f1b2";
}
.fa-cubes:before {
  content: "\f1b3";
}
.fa-behance:before {
  content: "\f1b4";
}
.fa-behance-square:before {
  content: "\f1b5";
}
.fa-steam:before {
  content: "\f1b6";
}
.fa-steam-square:before {
  content: "\f1b7";
}
.fa-recycle:before {
  content: "\f1b8";
}
.fa-automobile:before,
.fa-car:before {
  content: "\f1b9";
}
.fa-cab:before,
.fa-taxi:before {
  content: "\f1ba";
}
.fa-tree:before {
  content: "\f1bb";
}
.fa-spotify:before {
  content: "\f1bc";
}
.fa-deviantart:before {
  content: "\f1bd";
}
.fa-soundcloud:before {
  content: "\f1be";
}
.fa-database:before {
  content: "\f1c0";
}
.fa-file-pdf-o:before {
  content: "\f1c1";
}
.fa-file-word-o:before {
  content: "\f1c2";
}
.fa-file-excel-o:before {
  content: "\f1c3";
}
.fa-file-powerpoint-o:before {
  content: "\f1c4";
}
.fa-file-photo-o:before,
.fa-file-picture-o:before,
.fa-file-image-o:before {
  content: "\f1c5";
}
.fa-file-zip-o:before,
.fa-file-archive-o:before {
  content: "\f1c6";
}
.fa-file-sound-o:before,
.fa-file-audio-o:before {
  content: "\f1c7";
}
.fa-file-movie-o:before,
.fa-file-video-o:before {
  content: "\f1c8";
}
.fa-file-code-o:before {
  content: "\f1c9";
}
.fa-vine:before {
  content: "\f1ca";
}
.fa-codepen:before {
  content: "\f1cb";
}
.fa-jsfiddle:before {
  content: "\f1cc";
}
.fa-life-bouy:before,
.fa-life-buoy:before,
.fa-life-saver:before,
.fa-support:before,
.fa-life-ring:before {
  content: "\f1cd";
}
.fa-circle-o-notch:before {
  content: "\f1ce";
}
.fa-ra:before,
.fa-rebel:before {
  content: "\f1d0";
}
.fa-ge:before,
.fa-empire:before {
  content: "\f1d1";
}
.fa-git-square:before {
  content: "\f1d2";
}
.fa-git:before {
  content: "\f1d3";
}
.fa-hacker-news:before {
  content: "\f1d4";
}
.fa-tencent-weibo:before {
  content: "\f1d5";
}
.fa-qq:before {
  content: "\f1d6";
}
.fa-wechat:before,
.fa-weixin:before {
  content: "\f1d7";
}
.fa-send:before,
.fa-paper-plane:before {
  content: "\f1d8";
}
.fa-send-o:before,
.fa-paper-plane-o:before {
  content: "\f1d9";
}
.fa-history:before {
  content: "\f1da";
}
.fa-circle-thin:before {
  content: "\f1db";
}
.fa-header:before {
  content: "\f1dc";
}
.fa-paragraph:before {
  content: "\f1dd";
}
.fa-sliders:before {
  content: "\f1de";
}
.fa-share-alt:before {
  content: "\f1e0";
}
.fa-share-alt-square:before {
  content: "\f1e1";
}
.fa-bomb:before {
  content: "\f1e2";
}
.fa-soccer-ball-o:before,
.fa-futbol-o:before {
  content: "\f1e3";
}
.fa-tty:before {
  content: "\f1e4";
}
.fa-binoculars:before {
  content: "\f1e5";
}
.fa-plug:before {
  content: "\f1e6";
}
.fa-slideshare:before {
  content: "\f1e7";
}
.fa-twitch:before {
  content: "\f1e8";
}
.fa-yelp:before {
  content: "\f1e9";
}
.fa-newspaper-o:before {
  content: "\f1ea";
}
.fa-wifi:before {
  content: "\f1eb";
}
.fa-calculator:before {
  content: "\f1ec";
}
.fa-paypal:before {
  content: "\f1ed";
}
.fa-google-wallet:before {
  content: "\f1ee";
}
.fa-cc-visa:before {
  content: "\f1f0";
}
.fa-cc-mastercard:before {
  content: "\f1f1";
}
.fa-cc-discover:before {
  content: "\f1f2";
}
.fa-cc-amex:before {
  content: "\f1f3";
}
.fa-cc-paypal:before {
  content: "\f1f4";
}
.fa-cc-stripe:before {
  content: "\f1f5";
}
.fa-bell-slash:before {
  content: "\f1f6";
}
.fa-bell-slash-o:before {
  content: "\f1f7";
}
.fa-trash:before {
  content: "\f1f8";
}
.fa-copyright:before {
  content: "\f1f9";
}
.fa-at:before {
  content: "\f1fa";
}
.fa-eyedropper:before {
  content: "\f1fb";
}
.fa-paint-brush:before {
  content: "\f1fc";
}
.fa-birthday-cake:before {
  content: "\f1fd";
}
.fa-area-chart:before {
  content: "\f1fe";
}
.fa-pie-chart:before {
  content: "\f200";
}
.fa-line-chart:before {
  content: "\f201";
}
.fa-lastfm:before {
  content: "\f202";
}
.fa-lastfm-square:before {
  content: "\f203";
}
.fa-toggle-off:before {
  content: "\f204";
}
.fa-toggle-on:before {
  content: "\f205";
}
.fa-bicycle:before {
  content: "\f206";
}
.fa-bus:before {
  content: "\f207";
}
.fa-ioxhost:before {
  content: "\f208";
}
.fa-angellist:before {
  content: "\f209";
}
.fa-cc:before {
  content: "\f20a";
}
.fa-shekel:before,
.fa-sheqel:before,
.fa-ils:before {
  content: "\f20b";
}
.fa-meanpath:before {
  content: "\f20c";
}
/*!
*
* IPython base
*
*/
.modal.fade .modal-dialog {
  -webkit-transform: translate(0, 0);
  -ms-transform: translate(0, 0);
  -o-transform: translate(0, 0);
  transform: translate(0, 0);
}
code {
  color: #000;
}
pre {
  font-size: inherit;
  line-height: inherit;
}
label {
  font-weight: normal;
}
/* Make the page background atleast 100% the height of the view port */
/* Make the page itself atleast 70% the height of the view port */
.border-box-sizing {
  box-sizing: border-box;
  -moz-box-sizing: border-box;
  -webkit-box-sizing: border-box;
}
.corner-all {
  border-radius: 2px;
}
.no-padding {
  padding: 0px;
}
/* Flexible box model classes */
/* Taken from Alex Russell http://infrequently.org/2009/08/css-3-progress/ */
/* This file is a compatability layer.  It allows the usage of flexible box 
model layouts accross multiple browsers, including older browsers.  The newest,
universal implementation of the flexible box model is used when available (see
`Modern browsers` comments below).  Browsers that are known to implement this 
new spec completely include:

    Firefox 28.0+
    Chrome 29.0+
    Internet Explorer 11+ 
    Opera 17.0+

Browsers not listed, including Safari, are supported via the styling under the
`Old browsers` comments below.
*/
.hbox {
  /* Old browsers */
  display: -webkit-box;
  -webkit-box-orient: horizontal;
  -webkit-box-align: stretch;
  display: -moz-box;
  -moz-box-orient: horizontal;
  -moz-box-align: stretch;
  display: box;
  box-orient: horizontal;
  box-align: stretch;
  /* Modern browsers */
  display: flex;
  flex-direction: row;
  align-items: stretch;
}
.hbox > * {
  /* Old browsers */
  -webkit-box-flex: 0;
  -moz-box-flex: 0;
  box-flex: 0;
  /* Modern browsers */
  flex: none;
}
.vbox {
  /* Old browsers */
  display: -webkit-box;
  -webkit-box-orient: vertical;
  -webkit-box-align: stretch;
  display: -moz-box;
  -moz-box-orient: vertical;
  -moz-box-align: stretch;
  display: box;
  box-orient: vertical;
  box-align: stretch;
  /* Modern browsers */
  display: flex;
  flex-direction: column;
  align-items: stretch;
}
.vbox > * {
  /* Old browsers */
  -webkit-box-flex: 0;
  -moz-box-flex: 0;
  box-flex: 0;
  /* Modern browsers */
  flex: none;
}
.hbox.reverse,
.vbox.reverse,
.reverse {
  /* Old browsers */
  -webkit-box-direction: reverse;
  -moz-box-direction: reverse;
  box-direction: reverse;
  /* Modern browsers */
  flex-direction: row-reverse;
}
.hbox.box-flex0,
.vbox.box-flex0,
.box-flex0 {
  /* Old browsers */
  -webkit-box-flex: 0;
  -moz-box-flex: 0;
  box-flex: 0;
  /* Modern browsers */
  flex: none;
  width: auto;
}
.hbox.box-flex1,
.vbox.box-flex1,
.box-flex1 {
  /* Old browsers */
  -webkit-box-flex: 1;
  -moz-box-flex: 1;
  box-flex: 1;
  /* Modern browsers */
  flex: 1;
}
.hbox.box-flex,
.vbox.box-flex,
.box-flex {
  /* Old browsers */
  /* Old browsers */
  -webkit-box-flex: 1;
  -moz-box-flex: 1;
  box-flex: 1;
  /* Modern browsers */
  flex: 1;
}
.hbox.box-flex2,
.vbox.box-flex2,
.box-flex2 {
  /* Old browsers */
  -webkit-box-flex: 2;
  -moz-box-flex: 2;
  box-flex: 2;
  /* Modern browsers */
  flex: 2;
}
.box-group1 {
  /*  Deprecated */
  -webkit-box-flex-group: 1;
  -moz-box-flex-group: 1;
  box-flex-group: 1;
}
.box-group2 {
  /* Deprecated */
  -webkit-box-flex-group: 2;
  -moz-box-flex-group: 2;
  box-flex-group: 2;
}
.hbox.start,
.vbox.start,
.start {
  /* Old browsers */
  -webkit-box-pack: start;
  -moz-box-pack: start;
  box-pack: start;
  /* Modern browsers */
  justify-content: flex-start;
}
.hbox.end,
.vbox.end,
.end {
  /* Old browsers */
  -webkit-box-pack: end;
  -moz-box-pack: end;
  box-pack: end;
  /* Modern browsers */
  justify-content: flex-end;
}
.hbox.center,
.vbox.center,
.center {
  /* Old browsers */
  -webkit-box-pack: center;
  -moz-box-pack: center;
  box-pack: center;
  /* Modern browsers */
  justify-content: center;
}
.hbox.baseline,
.vbox.baseline,
.baseline {
  /* Old browsers */
  -webkit-box-pack: baseline;
  -moz-box-pack: baseline;
  box-pack: baseline;
  /* Modern browsers */
  justify-content: baseline;
}
.hbox.stretch,
.vbox.stretch,
.stretch {
  /* Old browsers */
  -webkit-box-pack: stretch;
  -moz-box-pack: stretch;
  box-pack: stretch;
  /* Modern browsers */
  justify-content: stretch;
}
.hbox.align-start,
.vbox.align-start,
.align-start {
  /* Old browsers */
  -webkit-box-align: start;
  -moz-box-align: start;
  box-align: start;
  /* Modern browsers */
  align-items: flex-start;
}
.hbox.align-end,
.vbox.align-end,
.align-end {
  /* Old browsers */
  -webkit-box-align: end;
  -moz-box-align: end;
  box-align: end;
  /* Modern browsers */
  align-items: flex-end;
}
.hbox.align-center,
.vbox.align-center,
.align-center {
  /* Old browsers */
  -webkit-box-align: center;
  -moz-box-align: center;
  box-align: center;
  /* Modern browsers */
  align-items: center;
}
.hbox.align-baseline,
.vbox.align-baseline,
.align-baseline {
  /* Old browsers */
  -webkit-box-align: baseline;
  -moz-box-align: baseline;
  box-align: baseline;
  /* Modern browsers */
  align-items: baseline;
}
.hbox.align-stretch,
.vbox.align-stretch,
.align-stretch {
  /* Old browsers */
  -webkit-box-align: stretch;
  -moz-box-align: stretch;
  box-align: stretch;
  /* Modern browsers */
  align-items: stretch;
}
div.error {
  margin: 2em;
  text-align: center;
}
div.error > h1 {
  font-size: 500%;
  line-height: normal;
}
div.error > p {
  font-size: 200%;
  line-height: normal;
}
div.traceback-wrapper {
  text-align: left;
  max-width: 800px;
  margin: auto;
}
/**
 * Primary styles
 *
 * Author: Jupyter Development Team
 */
body {
  background-color: #fff;
  /* This makes sure that the body covers the entire window and needs to
       be in a different element than the display: box in wrapper below */
  position: absolute;
  left: 0px;
  right: 0px;
  top: 0px;
  bottom: 0px;
  overflow: visible;
}
body > #header {
  /* Initially hidden to prevent FLOUC */
  display: none;
  background-color: #fff;
  /* Display over codemirror */
  position: relative;
  z-index: 100;
}
body > #header #header-container {
  padding-bottom: 5px;
  padding-top: 5px;
  box-sizing: border-box;
  -moz-box-sizing: border-box;
  -webkit-box-sizing: border-box;
}
body > #header .header-bar {
  width: 100%;
  height: 1px;
  background: #e7e7e7;
  margin-bottom: -1px;
}
@media print {
  body > #header {
    display: none !important;
  }
}
#header-spacer {
  width: 100%;
  visibility: hidden;
}
@media print {
  #header-spacer {
    display: none;
  }
}
#ipython_notebook {
  padding-left: 0px;
  padding-top: 1px;
  padding-bottom: 1px;
}
@media (max-width: 991px) {
  #ipython_notebook {
    margin-left: 10px;
  }
}
[dir="rtl"] #ipython_notebook {
  float: right !important;
}
#noscript {
  width: auto;
  padding-top: 16px;
  padding-bottom: 16px;
  text-align: center;
  font-size: 22px;
  color: red;
  font-weight: bold;
}
#ipython_notebook img {
  height: 28px;
}
#site {
  width: 100%;
  display: none;
  box-sizing: border-box;
  -moz-box-sizing: border-box;
  -webkit-box-sizing: border-box;
  overflow: auto;
}
@media print {
  #site {
    height: auto !important;
  }
}
/* Smaller buttons */
.ui-button .ui-button-text {
  padding: 0.2em 0.8em;
  font-size: 77%;
}
input.ui-button {
  padding: 0.3em 0.9em;
}
span#login_widget {
  float: right;
}
span#login_widget > .button,
#logout {
  color: #333;
  background-color: #fff;
  border-color: #ccc;
}
span#login_widget > .button:focus,
#logout:focus,
span#login_widget > .button.focus,
#logout.focus {
  color: #333;
  background-color: #e6e6e6;
  border-color: #8c8c8c;
}
span#login_widget > .button:hover,
#logout:hover {
  color: #333;
  background-color: #e6e6e6;
  border-color: #adadad;
}
span#login_widget > .button:active,
#logout:active,
span#login_widget > .button.active,
#logout.active,
.open > .dropdown-togglespan#login_widget > .button,
.open > .dropdown-toggle#logout {
  color: #333;
  background-color: #e6e6e6;
  border-color: #adadad;
}
span#login_widget > .button:active:hover,
#logout:active:hover,
span#login_widget > .button.active:hover,
#logout.active:hover,
.open > .dropdown-togglespan#login_widget > .button:hover,
.open > .dropdown-toggle#logout:hover,
span#login_widget > .button:active:focus,
#logout:active:focus,
span#login_widget > .button.active:focus,
#logout.active:focus,
.open > .dropdown-togglespan#login_widget > .button:focus,
.open > .dropdown-toggle#logout:focus,
span#login_widget > .button:active.focus,
#logout:active.focus,
span#login_widget > .button.active.focus,
#logout.active.focus,
.open > .dropdown-togglespan#login_widget > .button.focus,
.open > .dropdown-toggle#logout.focus {
  color: #333;
  background-color: #d4d4d4;
  border-color: #8c8c8c;
}
span#login_widget > .button:active,
#logout:active,
span#login_widget > .button.active,
#logout.active,
.open > .dropdown-togglespan#login_widget > .button,
.open > .dropdown-toggle#logout {
  background-image: none;
}
span#login_widget > .button.disabled:hover,
#logout.disabled:hover,
span#login_widget > .button[disabled]:hover,
#logout[disabled]:hover,
fieldset[disabled] span#login_widget > .button:hover,
fieldset[disabled] #logout:hover,
span#login_widget > .button.disabled:focus,
#logout.disabled:focus,
span#login_widget > .button[disabled]:focus,
#logout[disabled]:focus,
fieldset[disabled] span#login_widget > .button:focus,
fieldset[disabled] #logout:focus,
span#login_widget > .button.disabled.focus,
#logout.disabled.focus,
span#login_widget > .button[disabled].focus,
#logout[disabled].focus,
fieldset[disabled] span#login_widget > .button.focus,
fieldset[disabled] #logout.focus {
  background-color: #fff;
  border-color: #ccc;
}
span#login_widget > .button .badge,
#logout .badge {
  color: #fff;
  background-color: #333;
}
.nav-header {
  text-transform: none;
}
#header > span {
  margin-top: 10px;
}
.modal_stretch .modal-dialog {
  /* Old browsers */
  display: -webkit-box;
  -webkit-box-orient: vertical;
  -webkit-box-align: stretch;
  display: -moz-box;
  -moz-box-orient: vertical;
  -moz-box-align: stretch;
  display: box;
  box-orient: vertical;
  box-align: stretch;
  /* Modern browsers */
  display: flex;
  flex-direction: column;
  align-items: stretch;
  min-height: 80vh;
}
.modal_stretch .modal-dialog .modal-body {
  max-height: calc(100vh - 200px);
  overflow: auto;
  flex: 1;
}
@media (min-width: 768px) {
  .modal .modal-dialog {
    width: 700px;
  }
}
@media (min-width: 768px) {
  select.form-control {
    margin-left: 12px;
    margin-right: 12px;
  }
}
/*!
*
* IPython auth
*
*/
.center-nav {
  display: inline-block;
  margin-bottom: -4px;
}
/*!
*
* IPython tree view
*
*/
/* We need an invisible input field on top of the sentense*/
/* "Drag file onto the list ..." */
.alternate_upload {
  background-color: none;
  display: inline;
}
.alternate_upload.form {
  padding: 0;
  margin: 0;
}
.alternate_upload input.fileinput {
  text-align: center;
  vertical-align: middle;
  display: inline;
  opacity: 0;
  z-index: 2;
  width: 12ex;
  margin-right: -12ex;
}
.alternate_upload .btn-upload {
  height: 22px;
}
/**
 * Primary styles
 *
 * Author: Jupyter Development Team
 */
[dir="rtl"] #tabs li {
  float: right;
}
ul#tabs {
  margin-bottom: 4px;
}
[dir="rtl"] ul#tabs {
  margin-right: 0px;
}
ul#tabs a {
  padding-top: 6px;
  padding-bottom: 4px;
}
ul.breadcrumb a:focus,
ul.breadcrumb a:hover {
  text-decoration: none;
}
ul.breadcrumb i.icon-home {
  font-size: 16px;
  margin-right: 4px;
}
ul.breadcrumb span {
  color: #5e5e5e;
}
.list_toolbar {
  padding: 4px 0 4px 0;
  vertical-align: middle;
}
.list_toolbar .tree-buttons {
  padding-top: 1px;
}
[dir="rtl"] .list_toolbar .tree-buttons {
  float: left !important;
}
[dir="rtl"] .list_toolbar .pull-right {
  padding-top: 1px;
  float: left !important;
}
[dir="rtl"] .list_toolbar .pull-left {
  float: right !important;
}
.dynamic-buttons {
  padding-top: 3px;
  display: inline-block;
}
.list_toolbar [class*="span"] {
  min-height: 24px;
}
.list_header {
  font-weight: bold;
  background-color: #EEE;
}
.list_placeholder {
  font-weight: bold;
  padding-top: 4px;
  padding-bottom: 4px;
  padding-left: 7px;
  padding-right: 7px;
}
.list_container {
  margin-top: 4px;
  margin-bottom: 20px;
  border: 1px solid #ddd;
  border-radius: 2px;
}
.list_container > div {
  border-bottom: 1px solid #ddd;
}
.list_container > div:hover .list-item {
  background-color: red;
}
.list_container > div:last-child {
  border: none;
}
.list_item:hover .list_item {
  background-color: #ddd;
}
.list_item a {
  text-decoration: none;
}
.list_item:hover {
  background-color: #fafafa;
}
.list_header > div,
.list_item > div {
  padding-top: 4px;
  padding-bottom: 4px;
  padding-left: 7px;
  padding-right: 7px;
  line-height: 22px;
}
.list_header > div input,
.list_item > div input {
  margin-right: 7px;
  margin-left: 14px;
  vertical-align: baseline;
  line-height: 22px;
  position: relative;
  top: -1px;
}
.list_header > div .item_link,
.list_item > div .item_link {
  margin-left: -1px;
  vertical-align: baseline;
  line-height: 22px;
}
.new-file input[type=checkbox] {
  visibility: hidden;
}
.item_name {
  line-height: 22px;
  height: 24px;
}
.item_icon {
  font-size: 14px;
  color: #5e5e5e;
  margin-right: 7px;
  margin-left: 7px;
  line-height: 22px;
  vertical-align: baseline;
}
.item_buttons {
  line-height: 1em;
  margin-left: -5px;
}
.item_buttons .btn,
.item_buttons .btn-group,
.item_buttons .input-group {
  float: left;
}
.item_buttons > .btn,
.item_buttons > .btn-group,
.item_buttons > .input-group {
  margin-left: 5px;
}
.item_buttons .btn {
  min-width: 13ex;
}
.item_buttons .running-indicator {
  padding-top: 4px;
  color: #5cb85c;
}
.item_buttons .kernel-name {
  padding-top: 4px;
  color: #5bc0de;
  margin-right: 7px;
  float: left;
}
.toolbar_info {
  height: 24px;
  line-height: 24px;
}
.list_item input:not([type=checkbox]) {
  padding-top: 3px;
  padding-bottom: 3px;
  height: 22px;
  line-height: 14px;
  margin: 0px;
}
.highlight_text {
  color: blue;
}
#project_name {
  display: inline-block;
  padding-left: 7px;
  margin-left: -2px;
}
#project_name > .breadcrumb {
  padding: 0px;
  margin-bottom: 0px;
  background-color: transparent;
  font-weight: bold;
}
#tree-selector {
  padding-right: 0px;
}
[dir="rtl"] #tree-selector a {
  float: right;
}
#button-select-all {
  min-width: 50px;
}
#select-all {
  margin-left: 7px;
  margin-right: 2px;
}
.menu_icon {
  margin-right: 2px;
}
.tab-content .row {
  margin-left: 0px;
  margin-right: 0px;
}
.folder_icon:before {
  display: inline-block;
  font: normal normal normal 14px/1 FontAwesome;
  font-size: inherit;
  text-rendering: auto;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  content: "\f114";
}
.folder_icon:before.pull-left {
  margin-right: .3em;
}
.folder_icon:before.pull-right {
  margin-left: .3em;
}
.notebook_icon:before {
  display: inline-block;
  font: normal normal normal 14px/1 FontAwesome;
  font-size: inherit;
  text-rendering: auto;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  content: "\f02d";
  position: relative;
  top: -1px;
}
.notebook_icon:before.pull-left {
  margin-right: .3em;
}
.notebook_icon:before.pull-right {
  margin-left: .3em;
}
.running_notebook_icon:before {
  display: inline-block;
  font: normal normal normal 14px/1 FontAwesome;
  font-size: inherit;
  text-rendering: auto;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  content: "\f02d";
  position: relative;
  top: -1px;
  color: #5cb85c;
}
.running_notebook_icon:before.pull-left {
  margin-right: .3em;
}
.running_notebook_icon:before.pull-right {
  margin-left: .3em;
}
.file_icon:before {
  display: inline-block;
  font: normal normal normal 14px/1 FontAwesome;
  font-size: inherit;
  text-rendering: auto;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  content: "\f016";
  position: relative;
  top: -2px;
}
.file_icon:before.pull-left {
  margin-right: .3em;
}
.file_icon:before.pull-right {
  margin-left: .3em;
}
#notebook_toolbar .pull-right {
  padding-top: 0px;
  margin-right: -1px;
}
ul#new-menu {
  left: auto;
  right: 0;
}
[dir="rtl"] #new-menu {
  text-align: right;
}
.kernel-menu-icon {
  padding-right: 12px;
  width: 24px;
  content: "\f096";
}
.kernel-menu-icon:before {
  content: "\f096";
}
.kernel-menu-icon-current:before {
  content: "\f00c";
}
#tab_content {
  padding-top: 20px;
}
#running .panel-group .panel {
  margin-top: 3px;
  margin-bottom: 1em;
}
#running .panel-group .panel .panel-heading {
  background-color: #EEE;
  padding-top: 4px;
  padding-bottom: 4px;
  padding-left: 7px;
  padding-right: 7px;
  line-height: 22px;
}
#running .panel-group .panel .panel-heading a:focus,
#running .panel-group .panel .panel-heading a:hover {
  text-decoration: none;
}
#running .panel-group .panel .panel-body {
  padding: 0px;
}
#running .panel-group .panel .panel-body .list_container {
  margin-top: 0px;
  margin-bottom: 0px;
  border: 0px;
  border-radius: 0px;
}
#running .panel-group .panel .panel-body .list_container .list_item {
  border-bottom: 1px solid #ddd;
}
#running .panel-group .panel .panel-body .list_container .list_item:last-child {
  border-bottom: 0px;
}
[dir="rtl"] #running .col-sm-8 {
  float: right !important;
}
.delete-button {
  display: none;
}
.duplicate-button {
  display: none;
}
.rename-button {
  display: none;
}
.shutdown-button {
  display: none;
}
.dynamic-instructions {
  display: inline-block;
  padding-top: 4px;
}
/*!
*
* IPython text editor webapp
*
*/
.selected-keymap i.fa {
  padding: 0px 5px;
}
.selected-keymap i.fa:before {
  content: "\f00c";
}
#mode-menu {
  overflow: auto;
  max-height: 20em;
}
.edit_app #header {
  -webkit-box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2);
  box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2);
}
.edit_app #menubar .navbar {
  /* Use a negative 1 bottom margin, so the border overlaps the border of the
    header */
  margin-bottom: -1px;
}
.dirty-indicator {
  display: inline-block;
  font: normal normal normal 14px/1 FontAwesome;
  font-size: inherit;
  text-rendering: auto;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  width: 20px;
}
.dirty-indicator.pull-left {
  margin-right: .3em;
}
.dirty-indicator.pull-right {
  margin-left: .3em;
}
.dirty-indicator-dirty {
  display: inline-block;
  font: normal normal normal 14px/1 FontAwesome;
  font-size: inherit;
  text-rendering: auto;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  width: 20px;
}
.dirty-indicator-dirty.pull-left {
  margin-right: .3em;
}
.dirty-indicator-dirty.pull-right {
  margin-left: .3em;
}
.dirty-indicator-clean {
  display: inline-block;
  font: normal normal normal 14px/1 FontAwesome;
  font-size: inherit;
  text-rendering: auto;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  width: 20px;
}
.dirty-indicator-clean.pull-left {
  margin-right: .3em;
}
.dirty-indicator-clean.pull-right {
  margin-left: .3em;
}
.dirty-indicator-clean:before {
  display: inline-block;
  font: normal normal normal 14px/1 FontAwesome;
  font-size: inherit;
  text-rendering: auto;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  content: "\f00c";
}
.dirty-indicator-clean:before.pull-left {
  margin-right: .3em;
}
.dirty-indicator-clean:before.pull-right {
  margin-left: .3em;
}
#filename {
  font-size: 16pt;
  display: table;
  padding: 0px 5px;
}
#current-mode {
  padding-left: 5px;
  padding-right: 5px;
}
#texteditor-backdrop {
  padding-top: 20px;
  padding-bottom: 20px;
}
@media not print {
  #texteditor-backdrop {
    background-color: #EEE;
  }
}
@media print {
  #texteditor-backdrop #texteditor-container .CodeMirror-gutter,
  #texteditor-backdrop #texteditor-container .CodeMirror-gutters {
    background-color: #fff;
  }
}
@media not print {
  #texteditor-backdrop #texteditor-container .CodeMirror-gutter,
  #texteditor-backdrop #texteditor-container .CodeMirror-gutters {
    background-color: #fff;
  }
}
@media not print {
  #texteditor-backdrop #texteditor-container {
    padding: 0px;
    background-color: #fff;
    -webkit-box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2);
    box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2);
  }
}
/*!
*
* IPython notebook
*
*/
/* CSS font colors for translated ANSI colors. */
.ansibold {
  font-weight: bold;
}
/* use dark versions for foreground, to improve visibility */
.ansiblack {
  color: black;
}
.ansired {
  color: darkred;
}
.ansigreen {
  color: darkgreen;
}
.ansiyellow {
  color: #c4a000;
}
.ansiblue {
  color: darkblue;
}
.ansipurple {
  color: darkviolet;
}
.ansicyan {
  color: steelblue;
}
.ansigray {
  color: gray;
}
/* and light for background, for the same reason */
.ansibgblack {
  background-color: black;
}
.ansibgred {
  background-color: red;
}
.ansibggreen {
  background-color: green;
}
.ansibgyellow {
  background-color: yellow;
}
.ansibgblue {
  background-color: blue;
}
.ansibgpurple {
  background-color: magenta;
}
.ansibgcyan {
  background-color: cyan;
}
.ansibggray {
  background-color: gray;
}
div.cell {
  /* Old browsers */
  display: -webkit-box;
  -webkit-box-orient: vertical;
  -webkit-box-align: stretch;
  display: -moz-box;
  -moz-box-orient: vertical;
  -moz-box-align: stretch;
  display: box;
  box-orient: vertical;
  box-align: stretch;
  /* Modern browsers */
  display: flex;
  flex-direction: column;
  align-items: stretch;
  border-radius: 2px;
  box-sizing: border-box;
  -moz-box-sizing: border-box;
  -webkit-box-sizing: border-box;
  border-width: 1px;
  border-style: solid;
  border-color: transparent;
  width: 100%;
  padding: 5px;
  /* This acts as a spacer between cells, that is outside the border */
  margin: 0px;
  outline: none;
  border-left-width: 1px;
  padding-left: 5px;
  background: linear-gradient(to right, transparent -40px, transparent 1px, transparent 1px, transparent 100%);
}
div.cell.jupyter-soft-selected {
  border-left-color: #90CAF9;
  border-left-color: #E3F2FD;
  border-left-width: 1px;
  padding-left: 5px;
  border-right-color: #E3F2FD;
  border-right-width: 1px;
  background: #E3F2FD;
}
@media print {
  div.cell.jupyter-soft-selected {
    border-color: transparent;
  }
}
div.cell.selected {
  border-color: #ababab;
  border-left-width: 0px;
  padding-left: 6px;
  background: linear-gradient(to right, #42A5F5 -40px, #42A5F5 5px, transparent 5px, transparent 100%);
}
@media print {
  div.cell.selected {
    border-color: transparent;
  }
}
div.cell.selected.jupyter-soft-selected {
  border-left-width: 0;
  padding-left: 6px;
  background: linear-gradient(to right, #42A5F5 -40px, #42A5F5 7px, #E3F2FD 7px, #E3F2FD 100%);
}
.edit_mode div.cell.selected {
  border-color: #66BB6A;
  border-left-width: 0px;
  padding-left: 6px;
  background: linear-gradient(to right, #66BB6A -40px, #66BB6A 5px, transparent 5px, transparent 100%);
}
@media print {
  .edit_mode div.cell.selected {
    border-color: transparent;
  }
}
.prompt {
  /* This needs to be wide enough for 3 digit prompt numbers: In[100]: */
  min-width: 14ex;
  /* This padding is tuned to match the padding on the CodeMirror editor. */
  padding: 0.4em;
  margin: 0px;
  font-family: monospace;
  text-align: right;
  /* This has to match that of the the CodeMirror class line-height below */
  line-height: 1.21429em;
  /* Don't highlight prompt number selection */
  -webkit-touch-callout: none;
  -webkit-user-select: none;
  -khtml-user-select: none;
  -moz-user-select: none;
  -ms-user-select: none;
  user-select: none;
  /* Use default cursor */
  cursor: default;
}
@media (max-width: 540px) {
  .prompt {
    text-align: left;
  }
}
div.inner_cell {
  min-width: 0;
  /* Old browsers */
  display: -webkit-box;
  -webkit-box-orient: vertical;
  -webkit-box-align: stretch;
  display: -moz-box;
  -moz-box-orient: vertical;
  -moz-box-align: stretch;
  display: box;
  box-orient: vertical;
  box-align: stretch;
  /* Modern browsers */
  display: flex;
  flex-direction: column;
  align-items: stretch;
  /* Old browsers */
  -webkit-box-flex: 1;
  -moz-box-flex: 1;
  box-flex: 1;
  /* Modern browsers */
  flex: 1;
}
/* input_area and input_prompt must match in top border and margin for alignment */
div.input_area {
  border: 1px solid #cfcfcf;
  border-radius: 2px;
  background: #f7f7f7;
  line-height: 1.21429em;
}
/* This is needed so that empty prompt areas can collapse to zero height when there
   is no content in the output_subarea and the prompt. The main purpose of this is
   to make sure that empty JavaScript output_subareas have no height. */
div.prompt:empty {
  padding-top: 0;
  padding-bottom: 0;
}
div.unrecognized_cell {
  padding: 5px 5px 5px 0px;
  /* Old browsers */
  display: -webkit-box;
  -webkit-box-orient: horizontal;
  -webkit-box-align: stretch;
  display: -moz-box;
  -moz-box-orient: horizontal;
  -moz-box-align: stretch;
  display: box;
  box-orient: horizontal;
  box-align: stretch;
  /* Modern browsers */
  display: flex;
  flex-direction: row;
  align-items: stretch;
}
div.unrecognized_cell .inner_cell {
  border-radius: 2px;
  padding: 5px;
  font-weight: bold;
  color: red;
  border: 1px solid #cfcfcf;
  background: #eaeaea;
}
div.unrecognized_cell .inner_cell a {
  color: inherit;
  text-decoration: none;
}
div.unrecognized_cell .inner_cell a:hover {
  color: inherit;
  text-decoration: none;
}
@media (max-width: 540px) {
  div.unrecognized_cell > div.prompt {
    display: none;
  }
}
div.code_cell {
  /* avoid page breaking on code cells when printing */
}
@media print {
  div.code_cell {
    page-break-inside: avoid;
  }
}
/* any special styling for code cells that are currently running goes here */
div.input {
  page-break-inside: avoid;
  /* Old browsers */
  display: -webkit-box;
  -webkit-box-orient: horizontal;
  -webkit-box-align: stretch;
  display: -moz-box;
  -moz-box-orient: horizontal;
  -moz-box-align: stretch;
  display: box;
  box-orient: horizontal;
  box-align: stretch;
  /* Modern browsers */
  display: flex;
  flex-direction: row;
  align-items: stretch;
}
@media (max-width: 540px) {
  div.input {
    /* Old browsers */
    display: -webkit-box;
    -webkit-box-orient: vertical;
    -webkit-box-align: stretch;
    display: -moz-box;
    -moz-box-orient: vertical;
    -moz-box-align: stretch;
    display: box;
    box-orient: vertical;
    box-align: stretch;
    /* Modern browsers */
    display: flex;
    flex-direction: column;
    align-items: stretch;
  }
}
/* input_area and input_prompt must match in top border and margin for alignment */
div.input_prompt {
  color: #303F9F;
  border-top: 1px solid transparent;
}
div.input_area > div.highlight {
  margin: 0.4em;
  border: none;
  padding: 0px;
  background-color: transparent;
}
div.input_area > div.highlight > pre {
  margin: 0px;
  border: none;
  padding: 0px;
  background-color: transparent;
}
/* The following gets added to the <head> if it is detected that the user has a
 * monospace font with inconsistent normal/bold/italic height.  See
 * notebookmain.js.  Such fonts will have keywords vertically offset with
 * respect to the rest of the text.  The user should select a better font.
 * See: https://github.com/ipython/ipython/issues/1503
 *
 * .CodeMirror span {
 *      vertical-align: bottom;
 * }
 */
.CodeMirror {
  line-height: 1.21429em;
  /* Changed from 1em to our global default */
  font-size: 14px;
  height: auto;
  /* Changed to auto to autogrow */
  background: none;
  /* Changed from white to allow our bg to show through */
}
.CodeMirror-scroll {
  /*  The CodeMirror docs are a bit fuzzy on if overflow-y should be hidden or visible.*/
  /*  We have found that if it is visible, vertical scrollbars appear with font size changes.*/
  overflow-y: hidden;
  overflow-x: auto;
}
.CodeMirror-lines {
  /* In CM2, this used to be 0.4em, but in CM3 it went to 4px. We need the em value because */
  /* we have set a different line-height and want this to scale with that. */
  padding: 0.4em;
}
.CodeMirror-linenumber {
  padding: 0 8px 0 4px;
}
.CodeMirror-gutters {
  border-bottom-left-radius: 2px;
  border-top-left-radius: 2px;
}
.CodeMirror pre {
  /* In CM3 this went to 4px from 0 in CM2. We need the 0 value because of how we size */
  /* .CodeMirror-lines */
  padding: 0;
  border: 0;
  border-radius: 0;
}
/*

Original style from softwaremaniacs.org (c) Ivan Sagalaev <Maniac@SoftwareManiacs.Org>
Adapted from GitHub theme

*/
.highlight-base {
  color: #000;
}
.highlight-variable {
  color: #000;
}
.highlight-variable-2 {
  color: #1a1a1a;
}
.highlight-variable-3 {
  color: #333333;
}
.highlight-string {
  color: #BA2121;
}
.highlight-comment {
  color: #408080;
  font-style: italic;
}
.highlight-number {
  color: #080;
}
.highlight-atom {
  color: #88F;
}
.highlight-keyword {
  color: #008000;
  font-weight: bold;
}
.highlight-builtin {
  color: #008000;
}
.highlight-error {
  color: #f00;
}
.highlight-operator {
  color: #AA22FF;
  font-weight: bold;
}
.highlight-meta {
  color: #AA22FF;
}
/* previously not defined, copying from default codemirror */
.highlight-def {
  color: #00f;
}
.highlight-string-2 {
  color: #f50;
}
.highlight-qualifier {
  color: #555;
}
.highlight-bracket {
  color: #997;
}
.highlight-tag {
  color: #170;
}
.highlight-attribute {
  color: #00c;
}
.highlight-header {
  color: blue;
}
.highlight-quote {
  color: #090;
}
.highlight-link {
  color: #00c;
}
/* apply the same style to codemirror */
.cm-s-ipython span.cm-keyword {
  color: #008000;
  font-weight: bold;
}
.cm-s-ipython span.cm-atom {
  color: #88F;
}
.cm-s-ipython span.cm-number {
  color: #080;
}
.cm-s-ipython span.cm-def {
  color: #00f;
}
.cm-s-ipython span.cm-variable {
  color: #000;
}
.cm-s-ipython span.cm-operator {
  color: #AA22FF;
  font-weight: bold;
}
.cm-s-ipython span.cm-variable-2 {
  color: #1a1a1a;
}
.cm-s-ipython span.cm-variable-3 {
  color: #333333;
}
.cm-s-ipython span.cm-comment {
  color: #408080;
  font-style: italic;
}
.cm-s-ipython span.cm-string {
  color: #BA2121;
}
.cm-s-ipython span.cm-string-2 {
  color: #f50;
}
.cm-s-ipython span.cm-meta {
  color: #AA22FF;
}
.cm-s-ipython span.cm-qualifier {
  color: #555;
}
.cm-s-ipython span.cm-builtin {
  color: #008000;
}
.cm-s-ipython span.cm-bracket {
  color: #997;
}
.cm-s-ipython span.cm-tag {
  color: #170;
}
.cm-s-ipython span.cm-attribute {
  color: #00c;
}
.cm-s-ipython span.cm-header {
  color: blue;
}
.cm-s-ipython span.cm-quote {
  color: #090;
}
.cm-s-ipython span.cm-link {
  color: #00c;
}
.cm-s-ipython span.cm-error {
  color: #f00;
}
.cm-s-ipython span.cm-tab {
  background: url();
  background-position: right;
  background-repeat: no-repeat;
}
div.output_wrapper {
  /* this position must be relative to enable descendents to be absolute within it */
  position: relative;
  /* Old browsers */
  display: -webkit-box;
  -webkit-box-orient: vertical;
  -webkit-box-align: stretch;
  display: -moz-box;
  -moz-box-orient: vertical;
  -moz-box-align: stretch;
  display: box;
  box-orient: vertical;
  box-align: stretch;
  /* Modern browsers */
  display: flex;
  flex-direction: column;
  align-items: stretch;
  z-index: 1;
}
/* class for the output area when it should be height-limited */
div.output_scroll {
  /* ideally, this would be max-height, but FF barfs all over that */
  height: 24em;
  /* FF needs this *and the wrapper* to specify full width, or it will shrinkwrap */
  width: 100%;
  overflow: auto;
  border-radius: 2px;
  -webkit-box-shadow: inset 0 2px 8px rgba(0, 0, 0, 0.8);
  box-shadow: inset 0 2px 8px rgba(0, 0, 0, 0.8);
  display: block;
}
/* output div while it is collapsed */
div.output_collapsed {
  margin: 0px;
  padding: 0px;
  /* Old browsers */
  display: -webkit-box;
  -webkit-box-orient: vertical;
  -webkit-box-align: stretch;
  display: -moz-box;
  -moz-box-orient: vertical;
  -moz-box-align: stretch;
  display: box;
  box-orient: vertical;
  box-align: stretch;
  /* Modern browsers */
  display: flex;
  flex-direction: column;
  align-items: stretch;
}
div.out_prompt_overlay {
  height: 100%;
  padding: 0px 0.4em;
  position: absolute;
  border-radius: 2px;
}
div.out_prompt_overlay:hover {
  /* use inner shadow to get border that is computed the same on WebKit/FF */
  -webkit-box-shadow: inset 0 0 1px #000;
  box-shadow: inset 0 0 1px #000;
  background: rgba(240, 240, 240, 0.5);
}
div.output_prompt {
  color: #D84315;
}
/* This class is the outer container of all output sections. */
div.output_area {
  padding: 0px;
  page-break-inside: avoid;
  /* Old browsers */
  display: -webkit-box;
  -webkit-box-orient: horizontal;
  -webkit-box-align: stretch;
  display: -moz-box;
  -moz-box-orient: horizontal;
  -moz-box-align: stretch;
  display: box;
  box-orient: horizontal;
  box-align: stretch;
  /* Modern browsers */
  display: flex;
  flex-direction: row;
  align-items: stretch;
}
div.output_area .MathJax_Display {
  text-align: left !important;
}
div.output_area .rendered_html table {
  margin-left: 0;
  margin-right: 0;
}
div.output_area .rendered_html img {
  margin-left: 0;
  margin-right: 0;
}
div.output_area img,
div.output_area svg {
  max-width: 100%;
  height: auto;
}
div.output_area img.unconfined,
div.output_area svg.unconfined {
  max-width: none;
}
/* This is needed to protect the pre formating from global settings such
   as that of bootstrap */
.output {
  /* Old browsers */
  display: -webkit-box;
  -webkit-box-orient: vertical;
  -webkit-box-align: stretch;
  display: -moz-box;
  -moz-box-orient: vertical;
  -moz-box-align: stretch;
  display: box;
  box-orient: vertical;
  box-align: stretch;
  /* Modern browsers */
  display: flex;
  flex-direction: column;
  align-items: stretch;
}
@media (max-width: 540px) {
  div.output_area {
    /* Old browsers */
    display: -webkit-box;
    -webkit-box-orient: vertical;
    -webkit-box-align: stretch;
    display: -moz-box;
    -moz-box-orient: vertical;
    -moz-box-align: stretch;
    display: box;
    box-orient: vertical;
    box-align: stretch;
    /* Modern browsers */
    display: flex;
    flex-direction: column;
    align-items: stretch;
  }
}
div.output_area pre {
  margin: 0;
  padding: 0;
  border: 0;
  vertical-align: baseline;
  color: black;
  background-color: transparent;
  border-radius: 0;
}
/* This class is for the output subarea inside the output_area and after
   the prompt div. */
div.output_subarea {
  overflow-x: auto;
  padding: 0.4em;
  /* Old browsers */
  -webkit-box-flex: 1;
  -moz-box-flex: 1;
  box-flex: 1;
  /* Modern browsers */
  flex: 1;
  max-width: calc(100% - 14ex);
}
div.output_scroll div.output_subarea {
  overflow-x: visible;
}
/* The rest of the output_* classes are for special styling of the different
   output types */
/* all text output has this class: */
div.output_text {
  text-align: left;
  color: #000;
  /* This has to match that of the the CodeMirror class line-height below */
  line-height: 1.21429em;
}
/* stdout/stderr are 'text' as well as 'stream', but execute_result/error are *not* streams */
div.output_stderr {
  background: #fdd;
  /* very light red background for stderr */
}
div.output_latex {
  text-align: left;
}
/* Empty output_javascript divs should have no height */
div.output_javascript:empty {
  padding: 0;
}
.js-error {
  color: darkred;
}
/* raw_input styles */
div.raw_input_container {
  line-height: 1.21429em;
  padding-top: 5px;
}
pre.raw_input_prompt {
  /* nothing needed here. */
}
input.raw_input {
  font-family: monospace;
  font-size: inherit;
  color: inherit;
  width: auto;
  /* make sure input baseline aligns with prompt */
  vertical-align: baseline;
  /* padding + margin = 0.5em between prompt and cursor */
  padding: 0em 0.25em;
  margin: 0em 0.25em;
}
input.raw_input:focus {
  box-shadow: none;
}
p.p-space {
  margin-bottom: 10px;
}
div.output_unrecognized {
  padding: 5px;
  font-weight: bold;
  color: red;
}
div.output_unrecognized a {
  color: inherit;
  text-decoration: none;
}
div.output_unrecognized a:hover {
  color: inherit;
  text-decoration: none;
}
.rendered_html {
  color: #000;
  /* any extras will just be numbers: */
}
.rendered_html em {
  font-style: italic;
}
.rendered_html strong {
  font-weight: bold;
}
.rendered_html u {
  text-decoration: underline;
}
.rendered_html :link {
  text-decoration: underline;
}
.rendered_html :visited {
  text-decoration: underline;
}
.rendered_html h1 {
  font-size: 185.7%;
  margin: 1.08em 0 0 0;
  font-weight: bold;
  line-height: 1.0;
}
.rendered_html h2 {
  font-size: 157.1%;
  margin: 1.27em 0 0 0;
  font-weight: bold;
  line-height: 1.0;
}
.rendered_html h3 {
  font-size: 128.6%;
  margin: 1.55em 0 0 0;
  font-weight: bold;
  line-height: 1.0;
}
.rendered_html h4 {
  font-size: 100%;
  margin: 2em 0 0 0;
  font-weight: bold;
  line-height: 1.0;
}
.rendered_html h5 {
  font-size: 100%;
  margin: 2em 0 0 0;
  font-weight: bold;
  line-height: 1.0;
  font-style: italic;
}
.rendered_html h6 {
  font-size: 100%;
  margin: 2em 0 0 0;
  font-weight: bold;
  line-height: 1.0;
  font-style: italic;
}
.rendered_html h1:first-child {
  margin-top: 0.538em;
}
.rendered_html h2:first-child {
  margin-top: 0.636em;
}
.rendered_html h3:first-child {
  margin-top: 0.777em;
}
.rendered_html h4:first-child {
  margin-top: 1em;
}
.rendered_html h5:first-child {
  margin-top: 1em;
}
.rendered_html h6:first-child {
  margin-top: 1em;
}
.rendered_html ul {
  list-style: disc;
  margin: 0em 2em;
  padding-left: 0px;
}
.rendered_html ul ul {
  list-style: square;
  margin: 0em 2em;
}
.rendered_html ul ul ul {
  list-style: circle;
  margin: 0em 2em;
}
.rendered_html ol {
  list-style: decimal;
  margin: 0em 2em;
  padding-left: 0px;
}
.rendered_html ol ol {
  list-style: upper-alpha;
  margin: 0em 2em;
}
.rendered_html ol ol ol {
  list-style: lower-alpha;
  margin: 0em 2em;
}
.rendered_html ol ol ol ol {
  list-style: lower-roman;
  margin: 0em 2em;
}
.rendered_html ol ol ol ol ol {
  list-style: decimal;
  margin: 0em 2em;
}
.rendered_html * + ul {
  margin-top: 1em;
}
.rendered_html * + ol {
  margin-top: 1em;
}
.rendered_html hr {
  color: black;
  background-color: black;
}
.rendered_html pre {
  margin: 1em 2em;
}
.rendered_html pre,
.rendered_html code {
  border: 0;
  background-color: #fff;
  color: #000;
  font-size: 100%;
  padding: 0px;
}
.rendered_html blockquote {
  margin: 1em 2em;
}
.rendered_html table {
  margin-left: auto;
  margin-right: auto;
  border: 1px solid black;
  border-collapse: collapse;
}
.rendered_html tr,
.rendered_html th,
.rendered_html td {
  border: 1px solid black;
  border-collapse: collapse;
  margin: 1em 2em;
}
.rendered_html td,
.rendered_html th {
  text-align: left;
  vertical-align: middle;
  padding: 4px;
}
.rendered_html th {
  font-weight: bold;
}
.rendered_html * + table {
  margin-top: 1em;
}
.rendered_html p {
  text-align: left;
}
.rendered_html * + p {
  margin-top: 1em;
}
.rendered_html img {
  display: block;
  margin-left: auto;
  margin-right: auto;
}
.rendered_html * + img {
  margin-top: 1em;
}
.rendered_html img,
.rendered_html svg {
  max-width: 100%;
  height: auto;
}
.rendered_html img.unconfined,
.rendered_html svg.unconfined {
  max-width: none;
}
div.text_cell {
  /* Old browsers */
  display: -webkit-box;
  -webkit-box-orient: horizontal;
  -webkit-box-align: stretch;
  display: -moz-box;
  -moz-box-orient: horizontal;
  -moz-box-align: stretch;
  display: box;
  box-orient: horizontal;
  box-align: stretch;
  /* Modern browsers */
  display: flex;
  flex-direction: row;
  align-items: stretch;
}
@media (max-width: 540px) {
  div.text_cell > div.prompt {
    display: none;
  }
}
div.text_cell_render {
  /*font-family: "Helvetica Neue", Arial, Helvetica, Geneva, sans-serif;*/
  outline: none;
  resize: none;
  width: inherit;
  border-style: none;
  padding: 0.5em 0.5em 0.5em 0.4em;
  color: #000;
  box-sizing: border-box;
  -moz-box-sizing: border-box;
  -webkit-box-sizing: border-box;
}
a.anchor-link:link {
  text-decoration: none;
  padding: 0px 20px;
  visibility: hidden;
}
h1:hover .anchor-link,
h2:hover .anchor-link,
h3:hover .anchor-link,
h4:hover .anchor-link,
h5:hover .anchor-link,
h6:hover .anchor-link {
  visibility: visible;
}
.text_cell.rendered .input_area {
  display: none;
}
.text_cell.rendered .rendered_html {
  overflow-x: auto;
  overflow-y: hidden;
}
.text_cell.unrendered .text_cell_render {
  display: none;
}
.cm-header-1,
.cm-header-2,
.cm-header-3,
.cm-header-4,
.cm-header-5,
.cm-header-6 {
  font-weight: bold;
  font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
}
.cm-header-1 {
  font-size: 185.7%;
}
.cm-header-2 {
  font-size: 157.1%;
}
.cm-header-3 {
  font-size: 128.6%;
}
.cm-header-4 {
  font-size: 110%;
}
.cm-header-5 {
  font-size: 100%;
  font-style: italic;
}
.cm-header-6 {
  font-size: 100%;
  font-style: italic;
}
/*!
*
* IPython notebook webapp
*
*/
@media (max-width: 767px) {
  .notebook_app {
    padding-left: 0px;
    padding-right: 0px;
  }
}
#ipython-main-app {
  box-sizing: border-box;
  -moz-box-sizing: border-box;
  -webkit-box-sizing: border-box;
  height: 100%;
}
div#notebook_panel {
  margin: 0px;
  padding: 0px;
  box-sizing: border-box;
  -moz-box-sizing: border-box;
  -webkit-box-sizing: border-box;
  height: 100%;
}
div#notebook {
  font-size: 14px;
  line-height: 20px;
  overflow-y: hidden;
  overflow-x: auto;
  width: 100%;
  /* This spaces the page away from the edge of the notebook area */
  padding-top: 20px;
  margin: 0px;
  outline: none;
  box-sizing: border-box;
  -moz-box-sizing: border-box;
  -webkit-box-sizing: border-box;
  min-height: 100%;
}
@media not print {
  #notebook-container {
    padding: 15px;
    background-color: #fff;
    min-height: 0;
    -webkit-box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2);
    box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2);
  }
}
@media print {
  #notebook-container {
    width: 100%;
  }
}
div.ui-widget-content {
  border: 1px solid #ababab;
  outline: none;
}
pre.dialog {
  background-color: #f7f7f7;
  border: 1px solid #ddd;
  border-radius: 2px;
  padding: 0.4em;
  padding-left: 2em;
}
p.dialog {
  padding: 0.2em;
}
/* Word-wrap output correctly.  This is the CSS3 spelling, though Firefox seems
   to not honor it correctly.  Webkit browsers (Chrome, rekonq, Safari) do.
 */
pre,
code,
kbd,
samp {
  white-space: pre-wrap;
}
#fonttest {
  font-family: monospace;
}
p {
  margin-bottom: 0;
}
.end_space {
  min-height: 100px;
  transition: height .2s ease;
}
.notebook_app > #header {
  -webkit-box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2);
  box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2);
}
@media not print {
  .notebook_app {
    background-color: #EEE;
  }
}
kbd {
  border-style: solid;
  border-width: 1px;
  box-shadow: none;
  margin: 2px;
  padding-left: 2px;
  padding-right: 2px;
  padding-top: 1px;
  padding-bottom: 1px;
}
/* CSS for the cell toolbar */
.celltoolbar {
  border: thin solid #CFCFCF;
  border-bottom: none;
  background: #EEE;
  border-radius: 2px 2px 0px 0px;
  width: 100%;
  height: 29px;
  padding-right: 4px;
  /* Old browsers */
  display: -webkit-box;
  -webkit-box-orient: horizontal;
  -webkit-box-align: stretch;
  display: -moz-box;
  -moz-box-orient: horizontal;
  -moz-box-align: stretch;
  display: box;
  box-orient: horizontal;
  box-align: stretch;
  /* Modern browsers */
  display: flex;
  flex-direction: row;
  align-items: stretch;
  /* Old browsers */
  -webkit-box-pack: end;
  -moz-box-pack: end;
  box-pack: end;
  /* Modern browsers */
  justify-content: flex-end;
  display: -webkit-flex;
}
@media print {
  .celltoolbar {
    display: none;
  }
}
.ctb_hideshow {
  display: none;
  vertical-align: bottom;
}
/* ctb_show is added to the ctb_hideshow div to show the cell toolbar.
   Cell toolbars are only shown when the ctb_global_show class is also set.
*/
.ctb_global_show .ctb_show.ctb_hideshow {
  display: block;
}
.ctb_global_show .ctb_show + .input_area,
.ctb_global_show .ctb_show + div.text_cell_input,
.ctb_global_show .ctb_show ~ div.text_cell_render {
  border-top-right-radius: 0px;
  border-top-left-radius: 0px;
}
.ctb_global_show .ctb_show ~ div.text_cell_render {
  border: 1px solid #cfcfcf;
}
.celltoolbar {
  font-size: 87%;
  padding-top: 3px;
}
.celltoolbar select {
  display: block;
  width: 100%;
  height: 32px;
  padding: 6px 12px;
  font-size: 13px;
  line-height: 1.42857143;
  color: #555555;
  background-color: #fff;
  background-image: none;
  border: 1px solid #ccc;
  border-radius: 2px;
  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
  -webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
  -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
  transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
  height: 30px;
  padding: 5px 10px;
  font-size: 12px;
  line-height: 1.5;
  border-radius: 1px;
  width: inherit;
  font-size: inherit;
  height: 22px;
  padding: 0px;
  display: inline-block;
}
.celltoolbar select:focus {
  border-color: #66afe9;
  outline: 0;
  -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);
  box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);
}
.celltoolbar select::-moz-placeholder {
  color: #999;
  opacity: 1;
}
.celltoolbar select:-ms-input-placeholder {
  color: #999;
}
.celltoolbar select::-webkit-input-placeholder {
  color: #999;
}
.celltoolbar select::-ms-expand {
  border: 0;
  background-color: transparent;
}
.celltoolbar select[disabled],
.celltoolbar select[readonly],
fieldset[disabled] .celltoolbar select {
  background-color: #eeeeee;
  opacity: 1;
}
.celltoolbar select[disabled],
fieldset[disabled] .celltoolbar select {
  cursor: not-allowed;
}
textarea.celltoolbar select {
  height: auto;
}
select.celltoolbar select {
  height: 30px;
  line-height: 30px;
}
textarea.celltoolbar select,
select[multiple].celltoolbar select {
  height: auto;
}
.celltoolbar label {
  margin-left: 5px;
  margin-right: 5px;
}
.completions {
  position: absolute;
  z-index: 110;
  overflow: hidden;
  border: 1px solid #ababab;
  border-radius: 2px;
  -webkit-box-shadow: 0px 6px 10px -1px #adadad;
  box-shadow: 0px 6px 10px -1px #adadad;
  line-height: 1;
}
.completions select {
  background: white;
  outline: none;
  border: none;
  padding: 0px;
  margin: 0px;
  overflow: auto;
  font-family: monospace;
  font-size: 110%;
  color: #000;
  width: auto;
}
.completions select option.context {
  color: #286090;
}
#kernel_logo_widget {
  float: right !important;
  float: right;
}
#kernel_logo_widget .current_kernel_logo {
  display: none;
  margin-top: -1px;
  margin-bottom: -1px;
  width: 32px;
  height: 32px;
}
#menubar {
  box-sizing: border-box;
  -moz-box-sizing: border-box;
  -webkit-box-sizing: border-box;
  margin-top: 1px;
}
#menubar .navbar {
  border-top: 1px;
  border-radius: 0px 0px 2px 2px;
  margin-bottom: 0px;
}
#menubar .navbar-toggle {
  float: left;
  padding-top: 7px;
  padding-bottom: 7px;
  border: none;
}
#menubar .navbar-collapse {
  clear: left;
}
.nav-wrapper {
  border-bottom: 1px solid #e7e7e7;
}
i.menu-icon {
  padding-top: 4px;
}
ul#help_menu li a {
  overflow: hidden;
  padding-right: 2.2em;
}
ul#help_menu li a i {
  margin-right: -1.2em;
}
.dropdown-submenu {
  position: relative;
}
.dropdown-submenu > .dropdown-menu {
  top: 0;
  left: 100%;
  margin-top: -6px;
  margin-left: -1px;
}
.dropdown-submenu:hover > .dropdown-menu {
  display: block;
}
.dropdown-submenu > a:after {
  display: inline-block;
  font: normal normal normal 14px/1 FontAwesome;
  font-size: inherit;
  text-rendering: auto;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  display: block;
  content: "\f0da";
  float: right;
  color: #333333;
  margin-top: 2px;
  margin-right: -10px;
}
.dropdown-submenu > a:after.pull-left {
  margin-right: .3em;
}
.dropdown-submenu > a:after.pull-right {
  margin-left: .3em;
}
.dropdown-submenu:hover > a:after {
  color: #262626;
}
.dropdown-submenu.pull-left {
  float: none;
}
.dropdown-submenu.pull-left > .dropdown-menu {
  left: -100%;
  margin-left: 10px;
}
#notification_area {
  float: right !important;
  float: right;
  z-index: 10;
}
.indicator_area {
  float: right !important;
  float: right;
  color: #777;
  margin-left: 5px;
  margin-right: 5px;
  width: 11px;
  z-index: 10;
  text-align: center;
  width: auto;
}
#kernel_indicator {
  float: right !important;
  float: right;
  color: #777;
  margin-left: 5px;
  margin-right: 5px;
  width: 11px;
  z-index: 10;
  text-align: center;
  width: auto;
  border-left: 1px solid;
}
#kernel_indicator .kernel_indicator_name {
  padding-left: 5px;
  padding-right: 5px;
}
#modal_indicator {
  float: right !important;
  float: right;
  color: #777;
  margin-left: 5px;
  margin-right: 5px;
  width: 11px;
  z-index: 10;
  text-align: center;
  width: auto;
}
#readonly-indicator {
  float: right !important;
  float: right;
  color: #777;
  margin-left: 5px;
  margin-right: 5px;
  width: 11px;
  z-index: 10;
  text-align: center;
  width: auto;
  margin-top: 2px;
  margin-bottom: 0px;
  margin-left: 0px;
  margin-right: 0px;
  display: none;
}
.modal_indicator:before {
  width: 1.28571429em;
  text-align: center;
}
.edit_mode .modal_indicator:before {
  display: inline-block;
  font: normal normal normal 14px/1 FontAwesome;
  font-size: inherit;
  text-rendering: auto;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  content: "\f040";
}
.edit_mode .modal_indicator:before.pull-left {
  margin-right: .3em;
}
.edit_mode .modal_indicator:before.pull-right {
  margin-left: .3em;
}
.command_mode .modal_indicator:before {
  display: inline-block;
  font: normal normal normal 14px/1 FontAwesome;
  font-size: inherit;
  text-rendering: auto;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  content: ' ';
}
.command_mode .modal_indicator:before.pull-left {
  margin-right: .3em;
}
.command_mode .modal_indicator:before.pull-right {
  margin-left: .3em;
}
.kernel_idle_icon:before {
  display: inline-block;
  font: normal normal normal 14px/1 FontAwesome;
  font-size: inherit;
  text-rendering: auto;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  content: "\f10c";
}
.kernel_idle_icon:before.pull-left {
  margin-right: .3em;
}
.kernel_idle_icon:before.pull-right {
  margin-left: .3em;
}
.kernel_busy_icon:before {
  display: inline-block;
  font: normal normal normal 14px/1 FontAwesome;
  font-size: inherit;
  text-rendering: auto;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  content: "\f111";
}
.kernel_busy_icon:before.pull-left {
  margin-right: .3em;
}
.kernel_busy_icon:before.pull-right {
  margin-left: .3em;
}
.kernel_dead_icon:before {
  display: inline-block;
  font: normal normal normal 14px/1 FontAwesome;
  font-size: inherit;
  text-rendering: auto;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  content: "\f1e2";
}
.kernel_dead_icon:before.pull-left {
  margin-right: .3em;
}
.kernel_dead_icon:before.pull-right {
  margin-left: .3em;
}
.kernel_disconnected_icon:before {
  display: inline-block;
  font: normal normal normal 14px/1 FontAwesome;
  font-size: inherit;
  text-rendering: auto;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  content: "\f127";
}
.kernel_disconnected_icon:before.pull-left {
  margin-right: .3em;
}
.kernel_disconnected_icon:before.pull-right {
  margin-left: .3em;
}
.notification_widget {
  color: #777;
  z-index: 10;
  background: rgba(240, 240, 240, 0.5);
  margin-right: 4px;
  color: #333;
  background-color: #fff;
  border-color: #ccc;
}
.notification_widget:focus,
.notification_widget.focus {
  color: #333;
  background-color: #e6e6e6;
  border-color: #8c8c8c;
}
.notification_widget:hover {
  color: #333;
  background-color: #e6e6e6;
  border-color: #adadad;
}
.notification_widget:active,
.notification_widget.active,
.open > .dropdown-toggle.notification_widget {
  color: #333;
  background-color: #e6e6e6;
  border-color: #adadad;
}
.notification_widget:active:hover,
.notification_widget.active:hover,
.open > .dropdown-toggle.notification_widget:hover,
.notification_widget:active:focus,
.notification_widget.active:focus,
.open > .dropdown-toggle.notification_widget:focus,
.notification_widget:active.focus,
.notification_widget.active.focus,
.open > .dropdown-toggle.notification_widget.focus {
  color: #333;
  background-color: #d4d4d4;
  border-color: #8c8c8c;
}
.notification_widget:active,
.notification_widget.active,
.open > .dropdown-toggle.notification_widget {
  background-image: none;
}
.notification_widget.disabled:hover,
.notification_widget[disabled]:hover,
fieldset[disabled] .notification_widget:hover,
.notification_widget.disabled:focus,
.notification_widget[disabled]:focus,
fieldset[disabled] .notification_widget:focus,
.notification_widget.disabled.focus,
.notification_widget[disabled].focus,
fieldset[disabled] .notification_widget.focus {
  background-color: #fff;
  border-color: #ccc;
}
.notification_widget .badge {
  color: #fff;
  background-color: #333;
}
.notification_widget.warning {
  color: #fff;
  background-color: #f0ad4e;
  border-color: #eea236;
}
.notification_widget.warning:focus,
.notification_widget.warning.focus {
  color: #fff;
  background-color: #ec971f;
  border-color: #985f0d;
}
.notification_widget.warning:hover {
  color: #fff;
  background-color: #ec971f;
  border-color: #d58512;
}
.notification_widget.warning:active,
.notification_widget.warning.active,
.open > .dropdown-toggle.notification_widget.warning {
  color: #fff;
  background-color: #ec971f;
  border-color: #d58512;
}
.notification_widget.warning:active:hover,
.notification_widget.warning.active:hover,
.open > .dropdown-toggle.notification_widget.warning:hover,
.notification_widget.warning:active:focus,
.notification_widget.warning.active:focus,
.open > .dropdown-toggle.notification_widget.warning:focus,
.notification_widget.warning:active.focus,
.notification_widget.warning.active.focus,
.open > .dropdown-toggle.notification_widget.warning.focus {
  color: #fff;
  background-color: #d58512;
  border-color: #985f0d;
}
.notification_widget.warning:active,
.notification_widget.warning.active,
.open > .dropdown-toggle.notification_widget.warning {
  background-image: none;
}
.notification_widget.warning.disabled:hover,
.notification_widget.warning[disabled]:hover,
fieldset[disabled] .notification_widget.warning:hover,
.notification_widget.warning.disabled:focus,
.notification_widget.warning[disabled]:focus,
fieldset[disabled] .notification_widget.warning:focus,
.notification_widget.warning.disabled.focus,
.notification_widget.warning[disabled].focus,
fieldset[disabled] .notification_widget.warning.focus {
  background-color: #f0ad4e;
  border-color: #eea236;
}
.notification_widget.warning .badge {
  color: #f0ad4e;
  background-color: #fff;
}
.notification_widget.success {
  color: #fff;
  background-color: #5cb85c;
  border-color: #4cae4c;
}
.notification_widget.success:focus,
.notification_widget.success.focus {
  color: #fff;
  background-color: #449d44;
  border-color: #255625;
}
.notification_widget.success:hover {
  color: #fff;
  background-color: #449d44;
  border-color: #398439;
}
.notification_widget.success:active,
.notification_widget.success.active,
.open > .dropdown-toggle.notification_widget.success {
  color: #fff;
  background-color: #449d44;
  border-color: #398439;
}
.notification_widget.success:active:hover,
.notification_widget.success.active:hover,
.open > .dropdown-toggle.notification_widget.success:hover,
.notification_widget.success:active:focus,
.notification_widget.success.active:focus,
.open > .dropdown-toggle.notification_widget.success:focus,
.notification_widget.success:active.focus,
.notification_widget.success.active.focus,
.open > .dropdown-toggle.notification_widget.success.focus {
  color: #fff;
  background-color: #398439;
  border-color: #255625;
}
.notification_widget.success:active,
.notification_widget.success.active,
.open > .dropdown-toggle.notification_widget.success {
  background-image: none;
}
.notification_widget.success.disabled:hover,
.notification_widget.success[disabled]:hover,
fieldset[disabled] .notification_widget.success:hover,
.notification_widget.success.disabled:focus,
.notification_widget.success[disabled]:focus,
fieldset[disabled] .notification_widget.success:focus,
.notification_widget.success.disabled.focus,
.notification_widget.success[disabled].focus,
fieldset[disabled] .notification_widget.success.focus {
  background-color: #5cb85c;
  border-color: #4cae4c;
}
.notification_widget.success .badge {
  color: #5cb85c;
  background-color: #fff;
}
.notification_widget.info {
  color: #fff;
  background-color: #5bc0de;
  border-color: #46b8da;
}
.notification_widget.info:focus,
.notification_widget.info.focus {
  color: #fff;
  background-color: #31b0d5;
  border-color: #1b6d85;
}
.notification_widget.info:hover {
  color: #fff;
  background-color: #31b0d5;
  border-color: #269abc;
}
.notification_widget.info:active,
.notification_widget.info.active,
.open > .dropdown-toggle.notification_widget.info {
  color: #fff;
  background-color: #31b0d5;
  border-color: #269abc;
}
.notification_widget.info:active:hover,
.notification_widget.info.active:hover,
.open > .dropdown-toggle.notification_widget.info:hover,
.notification_widget.info:active:focus,
.notification_widget.info.active:focus,
.open > .dropdown-toggle.notification_widget.info:focus,
.notification_widget.info:active.focus,
.notification_widget.info.active.focus,
.open > .dropdown-toggle.notification_widget.info.focus {
  color: #fff;
  background-color: #269abc;
  border-color: #1b6d85;
}
.notification_widget.info:active,
.notification_widget.info.active,
.open > .dropdown-toggle.notification_widget.info {
  background-image: none;
}
.notification_widget.info.disabled:hover,
.notification_widget.info[disabled]:hover,
fieldset[disabled] .notification_widget.info:hover,
.notification_widget.info.disabled:focus,
.notification_widget.info[disabled]:focus,
fieldset[disabled] .notification_widget.info:focus,
.notification_widget.info.disabled.focus,
.notification_widget.info[disabled].focus,
fieldset[disabled] .notification_widget.info.focus {
  background-color: #5bc0de;
  border-color: #46b8da;
}
.notification_widget.info .badge {
  color: #5bc0de;
  background-color: #fff;
}
.notification_widget.danger {
  color: #fff;
  background-color: #d9534f;
  border-color: #d43f3a;
}
.notification_widget.danger:focus,
.notification_widget.danger.focus {
  color: #fff;
  background-color: #c9302c;
  border-color: #761c19;
}
.notification_widget.danger:hover {
  color: #fff;
  background-color: #c9302c;
  border-color: #ac2925;
}
.notification_widget.danger:active,
.notification_widget.danger.active,
.open > .dropdown-toggle.notification_widget.danger {
  color: #fff;
  background-color: #c9302c;
  border-color: #ac2925;
}
.notification_widget.danger:active:hover,
.notification_widget.danger.active:hover,
.open > .dropdown-toggle.notification_widget.danger:hover,
.notification_widget.danger:active:focus,
.notification_widget.danger.active:focus,
.open > .dropdown-toggle.notification_widget.danger:focus,
.notification_widget.danger:active.focus,
.notification_widget.danger.active.focus,
.open > .dropdown-toggle.notification_widget.danger.focus {
  color: #fff;
  background-color: #ac2925;
  border-color: #761c19;
}
.notification_widget.danger:active,
.notification_widget.danger.active,
.open > .dropdown-toggle.notification_widget.danger {
  background-image: none;
}
.notification_widget.danger.disabled:hover,
.notification_widget.danger[disabled]:hover,
fieldset[disabled] .notification_widget.danger:hover,
.notification_widget.danger.disabled:focus,
.notification_widget.danger[disabled]:focus,
fieldset[disabled] .notification_widget.danger:focus,
.notification_widget.danger.disabled.focus,
.notification_widget.danger[disabled].focus,
fieldset[disabled] .notification_widget.danger.focus {
  background-color: #d9534f;
  border-color: #d43f3a;
}
.notification_widget.danger .badge {
  color: #d9534f;
  background-color: #fff;
}
div#pager {
  background-color: #fff;
  font-size: 14px;
  line-height: 20px;
  overflow: hidden;
  display: none;
  position: fixed;
  bottom: 0px;
  width: 100%;
  max-height: 50%;
  padding-top: 8px;
  -webkit-box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2);
  box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2);
  /* Display over codemirror */
  z-index: 100;
  /* Hack which prevents jquery ui resizable from changing top. */
  top: auto !important;
}
div#pager pre {
  line-height: 1.21429em;
  color: #000;
  background-color: #f7f7f7;
  padding: 0.4em;
}
div#pager #pager-button-area {
  position: absolute;
  top: 8px;
  right: 20px;
}
div#pager #pager-contents {
  position: relative;
  overflow: auto;
  width: 100%;
  height: 100%;
}
div#pager #pager-contents #pager-container {
  position: relative;
  padding: 15px 0px;
  box-sizing: border-box;
  -moz-box-sizing: border-box;
  -webkit-box-sizing: border-box;
}
div#pager .ui-resizable-handle {
  top: 0px;
  height: 8px;
  background: #f7f7f7;
  border-top: 1px solid #cfcfcf;
  border-bottom: 1px solid #cfcfcf;
  /* This injects handle bars (a short, wide = symbol) for 
        the resize handle. */
}
div#pager .ui-resizable-handle::after {
  content: '';
  top: 2px;
  left: 50%;
  height: 3px;
  width: 30px;
  margin-left: -15px;
  position: absolute;
  border-top: 1px solid #cfcfcf;
}
.quickhelp {
  /* Old browsers */
  display: -webkit-box;
  -webkit-box-orient: horizontal;
  -webkit-box-align: stretch;
  display: -moz-box;
  -moz-box-orient: horizontal;
  -moz-box-align: stretch;
  display: box;
  box-orient: horizontal;
  box-align: stretch;
  /* Modern browsers */
  display: flex;
  flex-direction: row;
  align-items: stretch;
  line-height: 1.8em;
}
.shortcut_key {
  display: inline-block;
  width: 21ex;
  text-align: right;
  font-family: monospace;
}
.shortcut_descr {
  display: inline-block;
  /* Old browsers */
  -webkit-box-flex: 1;
  -moz-box-flex: 1;
  box-flex: 1;
  /* Modern browsers */
  flex: 1;
}
span.save_widget {
  margin-top: 6px;
}
span.save_widget span.filename {
  height: 1em;
  line-height: 1em;
  padding: 3px;
  margin-left: 16px;
  border: none;
  font-size: 146.5%;
  border-radius: 2px;
}
span.save_widget span.filename:hover {
  background-color: #e6e6e6;
}
span.checkpoint_status,
span.autosave_status {
  font-size: small;
}
@media (max-width: 767px) {
  span.save_widget {
    font-size: small;
  }
  span.checkpoint_status,
  span.autosave_status {
    display: none;
  }
}
@media (min-width: 768px) and (max-width: 991px) {
  span.checkpoint_status {
    display: none;
  }
  span.autosave_status {
    font-size: x-small;
  }
}
.toolbar {
  padding: 0px;
  margin-left: -5px;
  margin-top: 2px;
  margin-bottom: 5px;
  box-sizing: border-box;
  -moz-box-sizing: border-box;
  -webkit-box-sizing: border-box;
}
.toolbar select,
.toolbar label {
  width: auto;
  vertical-align: middle;
  margin-right: 2px;
  margin-bottom: 0px;
  display: inline;
  font-size: 92%;
  margin-left: 0.3em;
  margin-right: 0.3em;
  padding: 0px;
  padding-top: 3px;
}
.toolbar .btn {
  padding: 2px 8px;
}
.toolbar .btn-group {
  margin-top: 0px;
  margin-left: 5px;
}
#maintoolbar {
  margin-bottom: -3px;
  margin-top: -8px;
  border: 0px;
  min-height: 27px;
  margin-left: 0px;
  padding-top: 11px;
  padding-bottom: 3px;
}
#maintoolbar .navbar-text {
  float: none;
  vertical-align: middle;
  text-align: right;
  margin-left: 5px;
  margin-right: 0px;
  margin-top: 0px;
}
.select-xs {
  height: 24px;
}
.pulse,
.dropdown-menu > li > a.pulse,
li.pulse > a.dropdown-toggle,
li.pulse.open > a.dropdown-toggle {
  background-color: #F37626;
  color: white;
}
/**
 * Primary styles
 *
 * Author: Jupyter Development Team
 */
/** WARNING IF YOU ARE EDITTING THIS FILE, if this is a .css file, It has a lot
 * of chance of beeing generated from the ../less/[samename].less file, you can
 * try to get back the less file by reverting somme commit in history
 **/
/*
 * We'll try to get something pretty, so we
 * have some strange css to have the scroll bar on
 * the left with fix button on the top right of the tooltip
 */
@-moz-keyframes fadeOut {
  from {
    opacity: 1;
  }
  to {
    opacity: 0;
  }
}
@-webkit-keyframes fadeOut {
  from {
    opacity: 1;
  }
  to {
    opacity: 0;
  }
}
@-moz-keyframes fadeIn {
  from {
    opacity: 0;
  }
  to {
    opacity: 1;
  }
}
@-webkit-keyframes fadeIn {
  from {
    opacity: 0;
  }
  to {
    opacity: 1;
  }
}
/*properties of tooltip after "expand"*/
.bigtooltip {
  overflow: auto;
  height: 200px;
  -webkit-transition-property: height;
  -webkit-transition-duration: 500ms;
  -moz-transition-property: height;
  -moz-transition-duration: 500ms;
  transition-property: height;
  transition-duration: 500ms;
}
/*properties of tooltip before "expand"*/
.smalltooltip {
  -webkit-transition-property: height;
  -webkit-transition-duration: 500ms;
  -moz-transition-property: height;
  -moz-transition-duration: 500ms;
  transition-property: height;
  transition-duration: 500ms;
  text-overflow: ellipsis;
  overflow: hidden;
  height: 80px;
}
.tooltipbuttons {
  position: absolute;
  padding-right: 15px;
  top: 0px;
  right: 0px;
}
.tooltiptext {
  /*avoid the button to overlap on some docstring*/
  padding-right: 30px;
}
.ipython_tooltip {
  max-width: 700px;
  /*fade-in animation when inserted*/
  -webkit-animation: fadeOut 400ms;
  -moz-animation: fadeOut 400ms;
  animation: fadeOut 400ms;
  -webkit-animation: fadeIn 400ms;
  -moz-animation: fadeIn 400ms;
  animation: fadeIn 400ms;
  vertical-align: middle;
  background-color: #f7f7f7;
  overflow: visible;
  border: #ababab 1px solid;
  outline: none;
  padding: 3px;
  margin: 0px;
  padding-left: 7px;
  font-family: monospace;
  min-height: 50px;
  -moz-box-shadow: 0px 6px 10px -1px #adadad;
  -webkit-box-shadow: 0px 6px 10px -1px #adadad;
  box-shadow: 0px 6px 10px -1px #adadad;
  border-radius: 2px;
  position: absolute;
  z-index: 1000;
}
.ipython_tooltip a {
  float: right;
}
.ipython_tooltip .tooltiptext pre {
  border: 0;
  border-radius: 0;
  font-size: 100%;
  background-color: #f7f7f7;
}
.pretooltiparrow {
  left: 0px;
  margin: 0px;
  top: -16px;
  width: 40px;
  height: 16px;
  overflow: hidden;
  position: absolute;
}
.pretooltiparrow:before {
  background-color: #f7f7f7;
  border: 1px #ababab solid;
  z-index: 11;
  content: "";
  position: absolute;
  left: 15px;
  top: 10px;
  width: 25px;
  height: 25px;
  -webkit-transform: rotate(45deg);
  -moz-transform: rotate(45deg);
  -ms-transform: rotate(45deg);
  -o-transform: rotate(45deg);
}
ul.typeahead-list i {
  margin-left: -10px;
  width: 18px;
}
ul.typeahead-list {
  max-height: 80vh;
  overflow: auto;
}
ul.typeahead-list > li > a {
  /** Firefox bug **/
  /* see https://github.com/jupyter/notebook/issues/559 */
  white-space: normal;
}
.cmd-palette .modal-body {
  padding: 7px;
}
.cmd-palette form {
  background: white;
}
.cmd-palette input {
  outline: none;
}
.no-shortcut {
  display: none;
}
.command-shortcut:before {
  content: "(command)";
  padding-right: 3px;
  color: #777777;
}
.edit-shortcut:before {
  content: "(edit)";
  padding-right: 3px;
  color: #777777;
}
#find-and-replace #replace-preview .match,
#find-and-replace #replace-preview .insert {
  background-color: #BBDEFB;
  border-color: #90CAF9;
  border-style: solid;
  border-width: 1px;
  border-radius: 0px;
}
#find-and-replace #replace-preview .replace .match {
  background-color: #FFCDD2;
  border-color: #EF9A9A;
  border-radius: 0px;
}
#find-and-replace #replace-preview .replace .insert {
  background-color: #C8E6C9;
  border-color: #A5D6A7;
  border-radius: 0px;
}
#find-and-replace #replace-preview {
  max-height: 60vh;
  overflow: auto;
}
#find-and-replace #replace-preview pre {
  padding: 5px 10px;
}
.terminal-app {
  background: #EEE;
}
.terminal-app #header {
  background: #fff;
  -webkit-box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2);
  box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2);
}
.terminal-app .terminal {
  width: 100%;
  float: left;
  font-family: monospace;
  color: white;
  background: black;
  padding: 0.4em;
  border-radius: 2px;
  -webkit-box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.4);
  box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.4);
}
.terminal-app .terminal,
.terminal-app .terminal dummy-screen {
  line-height: 1em;
  font-size: 14px;
}
.terminal-app .terminal .xterm-rows {
  padding: 10px;
}
.terminal-app .terminal-cursor {
  color: black;
  background: white;
}
.terminal-app #terminado-container {
  margin-top: 20px;
}
/*# sourceMappingURL=style.min.css.map */
    </style>
<style type="text/css">
    .highlight .hll { background-color: #ffffcc }
.highlight  { background: #f8f8f8; }
.highlight .c { color: #408080; font-style: italic } /* Comment */
.highlight .err { border: 1px solid #FF0000 } /* Error */
.highlight .k { color: #008000; font-weight: bold } /* Keyword */
.highlight .o { color: #666666 } /* Operator */
.highlight .ch { color: #408080; font-style: italic } /* Comment.Hashbang */
.highlight .cm { color: #408080; font-style: italic } /* Comment.Multiline */
.highlight .cp { color: #BC7A00 } /* Comment.Preproc */
.highlight .cpf { color: #408080; font-style: italic } /* Comment.PreprocFile */
.highlight .c1 { color: #408080; font-style: italic } /* Comment.Single */
.highlight .cs { color: #408080; font-style: italic } /* Comment.Special */
.highlight .gd { color: #A00000 } /* Generic.Deleted */
.highlight .ge { font-style: italic } /* Generic.Emph */
.highlight .gr { color: #FF0000 } /* Generic.Error */
.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */
.highlight .gi { color: #00A000 } /* Generic.Inserted */
.highlight .go { color: #888888 } /* Generic.Output */
.highlight .gp { color: #000080; font-weight: bold } /* Generic.Prompt */
.highlight .gs { font-weight: bold } /* Generic.Strong */
.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */
.highlight .gt { color: #0044DD } /* Generic.Traceback */
.highlight .kc { color: #008000; font-weight: bold } /* Keyword.Constant */
.highlight .kd { color: #008000; font-weight: bold } /* Keyword.Declaration */
.highlight .kn { color: #008000; font-weight: bold } /* Keyword.Namespace */
.highlight .kp { color: #008000 } /* Keyword.Pseudo */
.highlight .kr { color: #008000; font-weight: bold } /* Keyword.Reserved */
.highlight .kt { color: #B00040 } /* Keyword.Type */
.highlight .m { color: #666666 } /* Literal.Number */
.highlight .s { color: #BA2121 } /* Literal.String */
.highlight .na { color: #7D9029 } /* Name.Attribute */
.highlight .nb { color: #008000 } /* Name.Builtin */
.highlight .nc { color: #0000FF; font-weight: bold } /* Name.Class */
.highlight .no { color: #880000 } /* Name.Constant */
.highlight .nd { color: #AA22FF } /* Name.Decorator */
.highlight .ni { color: #999999; font-weight: bold } /* Name.Entity */
.highlight .ne { color: #D2413A; font-weight: bold } /* Name.Exception */
.highlight .nf { color: #0000FF } /* Name.Function */
.highlight .nl { color: #A0A000 } /* Name.Label */
.highlight .nn { color: #0000FF; font-weight: bold } /* Name.Namespace */
.highlight .nt { color: #008000; font-weight: bold } /* Name.Tag */
.highlight .nv { color: #19177C } /* Name.Variable */
.highlight .ow { color: #AA22FF; font-weight: bold } /* Operator.Word */
.highlight .w { color: #bbbbbb } /* Text.Whitespace */
.highlight .mb { color: #666666 } /* Literal.Number.Bin */
.highlight .mf { color: #666666 } /* Literal.Number.Float */
.highlight .mh { color: #666666 } /* Literal.Number.Hex */
.highlight .mi { color: #666666 } /* Literal.Number.Integer */
.highlight .mo { color: #666666 } /* Literal.Number.Oct */
.highlight .sa { color: #BA2121 } /* Literal.String.Affix */
.highlight .sb { color: #BA2121 } /* Literal.String.Backtick */
.highlight .sc { color: #BA2121 } /* Literal.String.Char */
.highlight .dl { color: #BA2121 } /* Literal.String.Delimiter */
.highlight .sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */
.highlight .s2 { color: #BA2121 } /* Literal.String.Double */
.highlight .se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */
.highlight .sh { color: #BA2121 } /* Literal.String.Heredoc */
.highlight .si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */
.highlight .sx { color: #008000 } /* Literal.String.Other */
.highlight .sr { color: #BB6688 } /* Literal.String.Regex */
.highlight .s1 { color: #BA2121 } /* Literal.String.Single */
.highlight .ss { color: #19177C } /* Literal.String.Symbol */
.highlight .bp { color: #008000 } /* Name.Builtin.Pseudo */
.highlight .fm { color: #0000FF } /* Name.Function.Magic */
.highlight .vc { color: #19177C } /* Name.Variable.Class */
.highlight .vg { color: #19177C } /* Name.Variable.Global */
.highlight .vi { color: #19177C } /* Name.Variable.Instance */
.highlight .vm { color: #19177C } /* Name.Variable.Magic */
.highlight .il { color: #666666 } /* Literal.Number.Integer.Long */
    </style>
<style type="text/css">
    
/* Temporary definitions which will become obsolete with Notebook release 5.0 */
.ansi-black-fg { color: #3E424D; }
.ansi-black-bg { background-color: #3E424D; }
.ansi-black-intense-fg { color: #282C36; }
.ansi-black-intense-bg { background-color: #282C36; }
.ansi-red-fg { color: #E75C58; }
.ansi-red-bg { background-color: #E75C58; }
.ansi-red-intense-fg { color: #B22B31; }
.ansi-red-intense-bg { background-color: #B22B31; }
.ansi-green-fg { color: #00A250; }
.ansi-green-bg { background-color: #00A250; }
.ansi-green-intense-fg { color: #007427; }
.ansi-green-intense-bg { background-color: #007427; }
.ansi-yellow-fg { color: #DDB62B; }
.ansi-yellow-bg { background-color: #DDB62B; }
.ansi-yellow-intense-fg { color: #B27D12; }
.ansi-yellow-intense-bg { background-color: #B27D12; }
.ansi-blue-fg { color: #208FFB; }
.ansi-blue-bg { background-color: #208FFB; }
.ansi-blue-intense-fg { color: #0065CA; }
.ansi-blue-intense-bg { background-color: #0065CA; }
.ansi-magenta-fg { color: #D160C4; }
.ansi-magenta-bg { background-color: #D160C4; }
.ansi-magenta-intense-fg { color: #A03196; }
.ansi-magenta-intense-bg { background-color: #A03196; }
.ansi-cyan-fg { color: #60C6C8; }
.ansi-cyan-bg { background-color: #60C6C8; }
.ansi-cyan-intense-fg { color: #258F8F; }
.ansi-cyan-intense-bg { background-color: #258F8F; }
.ansi-white-fg { color: #C5C1B4; }
.ansi-white-bg { background-color: #C5C1B4; }
.ansi-white-intense-fg { color: #A1A6B2; }
.ansi-white-intense-bg { background-color: #A1A6B2; }

.ansi-bold { font-weight: bold; }

    </style>


<style type="text/css">
/* Overrides of notebook CSS for static HTML export */
body {
  overflow: visible;
  padding: 8px;
}

div#notebook {
  overflow: visible;
  border-top: none;
}@media print {
  div.cell {
    display: block;
    page-break-inside: avoid;
  } 
  div.output_wrapper { 
    display: block;
    page-break-inside: avoid; 
  }
  div.output { 
    display: block;
    page-break-inside: avoid; 
  }
}
</style>

<!-- Custom stylesheet, it must be in the same directory as the html file -->
<link rel="stylesheet" href="custom.css">

<!-- Loading mathjax macro -->
<!-- Load mathjax -->
    <script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS_HTML"></script>
    <!-- MathJax configuration -->
    <script type="text/x-mathjax-config">
    MathJax.Hub.Config({
        tex2jax: {
            inlineMath: [ ['$','$'], ["\\(","\\)"] ],
            displayMath: [ ['$$','$$'], ["\\[","\\]"] ],
            processEscapes: true,
            processEnvironments: true
        },
        // Center justify equations in code and markdown cells. Elsewhere
        // we use CSS to left justify single line equations in code cells.
        displayAlign: 'center',
        "HTML-CSS": {
            styles: {'.MathJax_Display': {"margin": 0}},
            linebreaks: { automatic: true }
        }
    });
    </script>
    <!-- End of mathjax configuration --></head>
<body>
  <div tabindex="-1" id="notebook" class="border-box-sizing">
    <div class="container" id="notebook-container">

<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[4]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="kn">import</span> <span class="nn">pandas</span> <span class="k">as</span> <span class="nn">pd</span>
<span class="kn">import</span> <span class="nn">numpy</span> <span class="k">as</span> <span class="nn">np</span>
<span class="kn">import</span> <span class="nn">locale</span>
<span class="kn">from</span> <span class="nn">collections</span> <span class="k">import</span> <span class="n">defaultdict</span>
<span class="kn">import</span> <span class="nn">pycountry</span>
<span class="kn">from</span> <span class="nn">sklearn.preprocessing</span> <span class="k">import</span> <span class="n">LabelEncoder</span><span class="p">,</span><span class="n">normalize</span>
<span class="kn">import</span> <span class="nn">re</span>
<span class="kn">import</span> <span class="nn">datetime</span>
<span class="kn">import</span> <span class="nn">scipy.io</span> <span class="k">as</span> <span class="nn">sio</span>
<span class="kn">import</span> <span class="nn">scipy.spatial.distance</span> <span class="k">as</span> <span class="nn">ssd</span>
</pre></div>

</div>
</div>
</div>

</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<h3 id="&#29992;&#25143;&#25968;&#25454;&#30340;&#22788;&#29702;">&#29992;&#25143;&#25968;&#25454;&#30340;&#22788;&#29702;<a class="anchor-link" href="#&#29992;&#25143;&#25968;&#25454;&#30340;&#22788;&#29702;">&#182;</a></h3>
</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[5]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="n">user_data</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">read_csv</span><span class="p">(</span><span class="s1">&#39;users.csv&#39;</span><span class="p">)</span>
<span class="nb">print</span><span class="p">(</span><span class="n">user_data</span><span class="o">.</span><span class="n">info</span><span class="p">())</span>
<span class="nb">print</span><span class="p">(</span><span class="n">user_data</span><span class="o">.</span><span class="n">head</span><span class="p">(</span><span class="mi">10</span><span class="p">))</span>
</pre></div>

</div>
</div>
</div>

<div class="output_wrapper">
<div class="output">


<div class="output_area">

<div class="prompt"></div>


<div class="output_subarea output_stream output_stdout output_text">
<pre>&lt;class &#39;pandas.core.frame.DataFrame&#39;&gt;
RangeIndex: 38209 entries, 0 to 38208
Data columns (total 7 columns):
user_id      38209 non-null int64
locale       38209 non-null object
birthyear    38209 non-null object
gender       38100 non-null object
joinedAt     38152 non-null object
location     32745 non-null object
timezone     37773 non-null float64
dtypes: float64(1), int64(1), object(5)
memory usage: 2.0+ MB
None
      user_id locale birthyear  gender                  joinedAt  \
0  3197468391  id_ID      1993    male  2012-10-02T06:40:55.524Z   
1  3537982273  id_ID      1992    male  2012-09-29T18:03:12.111Z   
2   823183725  en_US      1975    male  2012-10-06T03:14:07.149Z   
3  1872223848  en_US      1991  female  2012-11-04T08:59:43.783Z   
4  3429017717  id_ID      1995  female  2012-09-10T16:06:53.132Z   
5   627175141  ka_GE      1973  female  2012-11-01T09:59:17.590Z   
6  2752000443  id_ID      1994    male  2012-10-03T05:22:17.637Z   
7  3473687777  id_ID      1965  female  2012-10-03T12:19:29.975Z   
8  2966052962  id_ID      1979    male  2012-10-31T10:11:57.668Z   
9   264876277  id_ID      1988  female  2012-10-02T07:28:09.555Z   

             location  timezone  
0    Medan  Indonesia     480.0  
1    Medan  Indonesia     420.0  
2  Stratford  Ontario    -240.0  
3        Tehran  Iran     210.0  
4                 NaN     420.0  
5    Tbilisi  Georgia     240.0  
6    Medan  Indonesia     420.0  
7    Medan  Indonesia     420.0  
8    Medan  Indonesia     420.0  
9    Medan  Indonesia     420.0  
</pre>
</div>
</div>

</div>
</div>

</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[6]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="k">def</span> <span class="nf">getJoinedDate</span><span class="p">(</span><span class="n">dateString</span><span class="p">):</span>
    <span class="sd">&quot;&quot;&quot;</span>
<span class="sd">     对日期格式的处理，变成简单的年加月的形式</span>
<span class="sd">    &quot;&quot;&quot;</span>
    <span class="c1">#dateString = &#39;2012-07-11T03:04:29.622Z&#39;</span>
    <span class="n">dt</span> <span class="o">=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">datetime</span><span class="o">.</span><span class="n">strptime</span><span class="p">(</span><span class="n">dateString</span><span class="p">,</span> <span class="s2">&quot;%Y-%m-</span><span class="si">%d</span><span class="s2">T%H:%M:%S.</span><span class="si">%f</span><span class="s2">Z&quot;</span><span class="p">)</span>
    <span class="k">return</span> <span class="s2">&quot;&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">([</span><span class="nb">str</span><span class="p">(</span><span class="n">dt</span><span class="o">.</span><span class="n">year</span><span class="p">),</span> <span class="nb">str</span><span class="p">(</span><span class="n">dt</span><span class="o">.</span><span class="n">month</span><span class="p">)])</span>
</pre></div>

</div>
</div>
</div>

</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[7]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="n">lbl</span> <span class="o">=</span> <span class="n">LabelEncoder</span><span class="p">()</span>
</pre></div>

</div>
</div>
</div>

</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[8]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> 对缺失的数据进行处理，对日期格式的数据进行格式化（年+月的形式）</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="n">locale_label</span> <span class="o">=</span> <span class="n">lbl</span><span class="o">.</span><span class="n">fit_transform</span><span class="p">(</span><span class="n">user_data</span><span class="p">[</span><span class="s1">&#39;locale&#39;</span><span class="p">])</span>
<span class="c1"># pattern = r&#39;&lt;&#39;</span>
<span class="c1"># print(user_data[user_data[&#39;location&#39;].str.contains(pattern,na=False)])</span>
<span class="n">user_data</span><span class="p">[</span><span class="s1">&#39;timezone&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">fillna</span><span class="p">(</span><span class="s1">&#39;0&#39;</span><span class="p">,</span><span class="n">inplace</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
<span class="n">user_data</span><span class="p">[</span><span class="s1">&#39;location&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">fillna</span><span class="p">(</span><span class="s1">&#39;none&#39;</span><span class="p">,</span><span class="n">inplace</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
<span class="n">user_data</span><span class="p">[</span><span class="s1">&#39;gender&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">fillna</span><span class="p">(</span><span class="s1">&#39;male&#39;</span><span class="p">,</span><span class="n">inplace</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
<span class="n">user_data</span><span class="p">[</span><span class="s1">&#39;joinedAt&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">fillna</span><span class="p">(</span><span class="s1">&#39;2012-07-11T03:04:29.622Z&#39;</span><span class="p">,</span><span class="n">inplace</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
<span class="n">user_data</span><span class="p">[</span><span class="s1">&#39;joinedAt&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s1">&#39;None&#39;</span><span class="p">,</span><span class="s1">&#39;2012-07-11T03:04:29.622Z&#39;</span><span class="p">,</span><span class="n">inplace</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
<span class="n">user_data</span><span class="p">[</span><span class="s1">&#39;birthyear&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s1">&#39;None&#39;</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="n">inplace</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
<span class="c1">#print(user_data[&#39;joinedAt&#39;].isnull().value_counts())</span>
<span class="n">user_data</span><span class="p">[</span><span class="s1">&#39;joinedAt_format&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">user_data</span><span class="o">.</span><span class="n">apply</span><span class="p">(</span><span class="k">lambda</span> <span class="n">row</span><span class="p">:</span> <span class="n">getJoinedDate</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">row</span><span class="p">[</span><span class="s1">&#39;joinedAt&#39;</span><span class="p">])),</span><span class="n">axis</span> <span class="o">=</span> <span class="mi">1</span><span class="p">)</span>

<span class="n">location_label</span> <span class="o">=</span> <span class="n">lbl</span><span class="o">.</span><span class="n">fit_transform</span><span class="p">(</span><span class="n">user_data</span><span class="p">[</span><span class="s1">&#39;location&#39;</span><span class="p">])</span>
<span class="n">user_data</span><span class="p">[</span><span class="s1">&#39;gender&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">user_data</span><span class="p">[</span><span class="s1">&#39;gender&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">map</span><span class="p">({</span><span class="s1">&#39;male&#39;</span><span class="p">:</span><span class="mi">0</span><span class="p">,</span><span class="s1">&#39;female&#39;</span><span class="p">:</span><span class="mi">1</span><span class="p">})</span>
<span class="n">user_data</span><span class="p">[</span><span class="s1">&#39;local_id&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">locale_label</span>
<span class="n">user_data</span><span class="p">[</span><span class="s1">&#39;location_id&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">location_label</span>
</pre></div>

</div>
</div>
</div>

</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[9]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="kn">import</span> <span class="nn">pickle</span>
<span class="kn">import</span> <span class="nn">scipy.sparse</span> <span class="k">as</span> <span class="nn">ss</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> 减少计算量，只计算在train和test数据集中出现的用户和活动</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="n">userindex</span> <span class="o">=</span> <span class="n">pickle</span><span class="o">.</span><span class="n">load</span><span class="p">(</span><span class="nb">open</span><span class="p">(</span><span class="s1">&#39;userIndex.pkl&#39;</span><span class="p">,</span><span class="s1">&#39;rb&#39;</span><span class="p">))</span>
<span class="n">nusers</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">userindex</span><span class="o">.</span><span class="n">keys</span><span class="p">())</span>
<span class="n">user_data</span><span class="o">.</span><span class="n">drop</span><span class="p">([</span><span class="s1">&#39;locale&#39;</span><span class="p">,</span><span class="s1">&#39;joinedAt&#39;</span><span class="p">,</span><span class="s1">&#39;location&#39;</span><span class="p">],</span><span class="n">axis</span> <span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="n">inplace</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
<span class="n">columns</span> <span class="o">=</span> <span class="n">user_data</span><span class="o">.</span><span class="n">columns</span>
</pre></div>

</div>
</div>
</div>

</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[10]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> 定义一个以字典形式保存数据的矩阵。</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="n">userMatrix</span> <span class="o">=</span> <span class="n">ss</span><span class="o">.</span><span class="n">dok_matrix</span><span class="p">((</span><span class="n">nusers</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">columns</span><span class="p">)</span> <span class="o">-</span> <span class="mi">1</span><span class="p">))</span>
<span class="nb">print</span><span class="p">(</span><span class="n">columns</span><span class="p">)</span>
</pre></div>

</div>
</div>
</div>

<div class="output_wrapper">
<div class="output">


<div class="output_area">

<div class="prompt"></div>


<div class="output_subarea output_stream output_stdout output_text">
<pre>Index([&#39;user_id&#39;, &#39;birthyear&#39;, &#39;gender&#39;, &#39;timezone&#39;, &#39;joinedAt_format&#39;,
       &#39;local_id&#39;, &#39;location_id&#39;],
      dtype=&#39;object&#39;)
</pre>
</div>
</div>

</div>
</div>

</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[11]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> 删选用户，只挑选出在train和test数据集中出现的用户</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="n">train_user_data</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="p">()</span>
<span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">userindex</span><span class="p">:</span>
    <span class="n">train_user_data</span> <span class="o">=</span> <span class="n">train_user_data</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">user_data</span><span class="p">[</span><span class="n">user_data</span><span class="p">[</span><span class="s1">&#39;user_id&#39;</span><span class="p">]</span> <span class="o">==</span> <span class="nb">int</span><span class="p">(</span><span class="n">key</span><span class="p">)])</span>
</pre></div>

</div>
</div>
</div>

</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[12]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> 将用户的信息存入矩阵</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="k">for</span> <span class="n">idx</span><span class="p">,</span><span class="n">val</span> <span class="ow">in</span> <span class="n">train_user_data</span><span class="o">.</span><span class="n">iterrows</span><span class="p">():</span>
    <span class="n">userMatrix</span><span class="p">[</span><span class="n">userindex</span><span class="p">[</span><span class="nb">str</span><span class="p">(</span><span class="n">val</span><span class="p">[</span><span class="s1">&#39;user_id&#39;</span><span class="p">])],</span><span class="mi">0</span><span class="p">]</span> <span class="o">=</span> <span class="n">val</span><span class="p">[</span><span class="s1">&#39;birthyear&#39;</span><span class="p">]</span>
    <span class="n">userMatrix</span><span class="p">[</span><span class="n">userindex</span><span class="p">[</span><span class="nb">str</span><span class="p">(</span><span class="n">val</span><span class="p">[</span><span class="s1">&#39;user_id&#39;</span><span class="p">])],</span> <span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="n">val</span><span class="p">[</span><span class="s1">&#39;gender&#39;</span><span class="p">]</span>
    <span class="n">userMatrix</span><span class="p">[</span><span class="n">userindex</span><span class="p">[</span><span class="nb">str</span><span class="p">(</span><span class="n">val</span><span class="p">[</span><span class="s1">&#39;user_id&#39;</span><span class="p">])],</span> <span class="mi">2</span><span class="p">]</span> <span class="o">=</span> <span class="n">val</span><span class="p">[</span><span class="s1">&#39;timezone&#39;</span><span class="p">]</span>
    <span class="n">userMatrix</span><span class="p">[</span><span class="n">userindex</span><span class="p">[</span><span class="nb">str</span><span class="p">(</span><span class="n">val</span><span class="p">[</span><span class="s1">&#39;user_id&#39;</span><span class="p">])],</span> <span class="mi">3</span><span class="p">]</span> <span class="o">=</span> <span class="n">val</span><span class="p">[</span><span class="s1">&#39;joinedAt_format&#39;</span><span class="p">]</span>
    <span class="n">userMatrix</span><span class="p">[</span><span class="n">userindex</span><span class="p">[</span><span class="nb">str</span><span class="p">(</span><span class="n">val</span><span class="p">[</span><span class="s1">&#39;user_id&#39;</span><span class="p">])],</span> <span class="mi">4</span><span class="p">]</span> <span class="o">=</span> <span class="n">val</span><span class="p">[</span><span class="s1">&#39;local_id&#39;</span><span class="p">]</span>
    <span class="n">userMatrix</span><span class="p">[</span><span class="n">userindex</span><span class="p">[</span><span class="nb">str</span><span class="p">(</span><span class="n">val</span><span class="p">[</span><span class="s1">&#39;user_id&#39;</span><span class="p">])],</span> <span class="mi">5</span><span class="p">]</span> <span class="o">=</span> <span class="n">val</span><span class="p">[</span><span class="s1">&#39;location_id&#39;</span><span class="p">]</span>
<span class="nb">print</span><span class="p">(</span><span class="n">userMatrix</span><span class="p">)</span>
</pre></div>

</div>
</div>
</div>

<div class="output_wrapper">
<div class="output">


<div class="output_area">

<div class="prompt"></div>


<div class="output_subarea output_stream output_stdout output_text">
<pre>  (0, 0)	1987.0
  (0, 2)	180.0
  (0, 3)	201210.0
  (0, 4)	1.0
  (1, 0)	1996.0
  (1, 1)	1.0
  (1, 2)	420.0
  (1, 3)	201210.0
  (1, 4)	31.0
  (1, 5)	1535.0
  (2, 0)	1967.0
  (2, 2)	60.0
  (2, 3)	201210.0
  (2, 4)	16.0
  (2, 5)	1311.0
  (3, 0)	1993.0
  (3, 1)	1.0
  (3, 2)	-300.0
  (3, 3)	201210.0
  (3, 4)	19.0
  (3, 5)	398.0
  (4, 0)	1915.0
  (4, 2)	210.0
  (4, 3)	201211.0
  (4, 4)	22.0
  :	:
  (3386, 4)	16.0
  (3386, 5)	687.0
  (3387, 0)	1983.0
  (3387, 2)	-480.0
  (3387, 3)	201210.0
  (3387, 4)	16.0
  (3387, 5)	2247.0
  (3388, 0)	1998.0
  (3388, 1)	1.0
  (3388, 2)	240.0
  (3388, 3)	201210.0
  (3388, 4)	16.0
  (3388, 5)	266.0
  (3389, 0)	1995.0
  (3389, 1)	1.0
  (3389, 2)	-180.0
  (3389, 3)	201210.0
  (3389, 4)	18.0
  (3389, 5)	2257.0
  (3390, 0)	1994.0
  (3390, 1)	1.0
  (3390, 2)	-480.0
  (3390, 3)	201210.0
  (3390, 4)	26.0
  (3390, 5)	2593.0
</pre>
</div>
</div>

</div>
</div>

</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[13]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> 对矩阵进行归一化处理</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="n">userMatrix</span> <span class="o">=</span> <span class="n">normalize</span><span class="p">(</span><span class="n">userMatrix</span><span class="p">,</span> <span class="n">norm</span><span class="o">=</span><span class="s2">&quot;l1&quot;</span><span class="p">,</span> <span class="n">axis</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
<span class="n">sio</span><span class="o">.</span><span class="n">mmwrite</span><span class="p">(</span><span class="s2">&quot;userMatrix&quot;</span><span class="p">,</span><span class="n">userMatrix</span><span class="p">)</span>
</pre></div>

</div>
</div>
</div>

</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[14]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> 定义一个以字典形式存放数据的矩阵，用来存放用户之间相似度</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="n">userSimMatrix</span> <span class="o">=</span> <span class="n">ss</span><span class="o">.</span><span class="n">dok_matrix</span><span class="p">((</span><span class="n">nusers</span><span class="p">,</span> <span class="n">nusers</span><span class="p">))</span>
</pre></div>

</div>
</div>
</div>

</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<p>scipy.spatial.distance.correlation
Computes the correlation distance between two 1-D arrays.
The correlation distance between u and v, is defined as</p>
<p><img src="attachment:image.png" alt="image.png"></p>

</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[15]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> 数据userpairs表示两个用户对同一个活动感兴趣。即所谓的关联用户，指的是至少在同一个event上有行为的用户。</span>
<span class="sd"> 调用scipy的矩阵距离计算公式来计算关联用户之间的相似度</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="n">userparis</span> <span class="o">=</span> <span class="n">pickle</span><span class="o">.</span><span class="n">load</span><span class="p">(</span><span class="nb">open</span><span class="p">(</span><span class="s1">&#39;FE_uniqueUserPairs.pkl&#39;</span><span class="p">,</span><span class="s1">&#39;rb&#39;</span><span class="p">))</span>
<span class="n">sim</span><span class="o">=</span><span class="n">ssd</span><span class="o">.</span><span class="n">correlation</span>  <span class="c1"># 相关性分析</span>
<span class="k">for</span> <span class="n">u1</span><span class="p">,</span><span class="n">u2</span> <span class="ow">in</span> <span class="n">userparis</span><span class="p">:</span>
    <span class="c1">#print(userMatrix.getrow(u1).todense(),userMatrix.getrow(u2).todense())</span>
    <span class="k">if</span> <span class="p">(</span><span class="n">u1</span><span class="p">,</span><span class="n">u2</span><span class="p">)</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">userSimMatrix</span><span class="p">:</span>
        <span class="n">usim</span> <span class="o">=</span> <span class="n">sim</span><span class="p">(</span><span class="n">userMatrix</span><span class="o">.</span><span class="n">getrow</span><span class="p">(</span><span class="n">u1</span><span class="p">)</span><span class="o">.</span><span class="n">todense</span><span class="p">(),</span><span class="n">userMatrix</span><span class="o">.</span><span class="n">getrow</span><span class="p">(</span><span class="n">u2</span><span class="p">)</span><span class="o">.</span><span class="n">todense</span><span class="p">())</span>
        <span class="n">userSimMatrix</span><span class="p">[</span><span class="n">u1</span><span class="p">,</span> <span class="n">u2</span><span class="p">]</span> <span class="o">=</span> <span class="n">usim</span>
        <span class="n">userSimMatrix</span><span class="p">[</span><span class="n">u2</span><span class="p">,</span> <span class="n">u1</span><span class="p">]</span> <span class="o">=</span> <span class="n">usim</span>
<span class="n">sio</span><span class="o">.</span><span class="n">mmwrite</span><span class="p">(</span><span class="s2">&quot;userSimMatrix&quot;</span><span class="p">,</span><span class="n">userSimMatrix</span><span class="p">)</span>
</pre></div>

</div>
</div>
</div>

</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[16]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> 用户相似度矩阵存放的数据</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="nb">print</span><span class="p">(</span><span class="n">userSimMatrix</span><span class="p">)</span>
</pre></div>

</div>
</div>
</div>

<div class="output_wrapper">
<div class="output">


<div class="output_area">

<div class="prompt"></div>


<div class="output_subarea output_stream output_stdout output_text">
<pre>  (2406, 3186)	0.393656462178
  (3186, 2406)	0.393656462178
  (1741, 1794)	9.26802640189e-08
  (1794, 1741)	9.26802640189e-08
  (2579, 2140)	0.0961896382944
  (2140, 2579)	0.0961896382944
  (1285, 624)	0.0852024167942
  (624, 1285)	0.0852024167942
  (2568, 151)	0.0112887053409
  (151, 2568)	0.0112887053409
  (2545, 2026)	0.00226282733964
  (2026, 2545)	0.00226282733964
  (1571, 2871)	0.388088841109
  (2871, 1571)	0.388088841109
  (683, 418)	1.73088954214e-06
  (418, 683)	1.73088954214e-06
  (1070, 722)	0.409449975972
  (722, 1070)	0.409449975972
  (3160, 2661)	4.12397679672e-07
  (2661, 3160)	4.12397679672e-07
  (2667, 835)	9.26955089353e-08
  (835, 2667)	9.26955089353e-08
  (649, 2082)	0.147599579802
  (2082, 649)	0.147599579802
  (1850, 2402)	1.83797102123
  :	:
  (2962, 3150)	1.81618488196
  (2191, 2837)	1.63521315493
  (2837, 2191)	1.63521315493
  (121, 857)	9.32178157997e-08
  (857, 121)	9.32178157997e-08
  (1869, 528)	3.68382659821e-07
  (528, 1869)	3.68382659821e-07
  (3237, 1741)	1.48251537224e-06
  (1741, 3237)	1.48251537224e-06
  (2442, 998)	1.16726045637
  (998, 2442)	1.16726045637
  (1260, 934)	0.354153324843
  (934, 1260)	0.354153324843
  (2907, 2442)	0.745539434637
  (2442, 2907)	0.745539434637
  (1659, 1476)	8.3872025507e-06
  (1476, 1659)	8.3872025507e-06
  (2144, 1162)	1.97452855622
  (1162, 2144)	1.97452855622
  (199, 1930)	0.358189452422
  (1930, 199)	0.358189452422
  (554, 3223)	0.354358943919
  (3223, 554)	0.354358943919
  (2649, 419)	9.26649537103e-08
  (419, 2649)	9.26649537103e-08
</pre>
</div>
</div>

</div>
</div>

</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[17]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> 用户好友的分析，读入好友数据</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="n">friend_data</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">read_csv</span><span class="p">(</span><span class="s1">&#39;user_friends.csv&#39;</span><span class="p">)</span>
</pre></div>

</div>
</div>
</div>

</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[18]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> 删选出只在train和test数据集出现的用户的好友信息</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="n">friend_user</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="p">()</span>
<span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">userindex</span><span class="p">:</span>
    <span class="n">friend_user</span> <span class="o">=</span> <span class="n">friend_user</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">friend_data</span><span class="p">[</span><span class="n">friend_data</span><span class="p">[</span><span class="s1">&#39;user&#39;</span><span class="p">]</span> <span class="o">==</span> <span class="n">key</span><span class="p">])</span>
<span class="nb">print</span><span class="p">(</span><span class="n">friend_user</span><span class="p">)</span>
</pre></div>

</div>
</div>
</div>

<div class="output_wrapper">
<div class="output">


<div class="output_area">

<div class="prompt"></div>


<div class="output_subarea output_stream output_stdout output_text">
<pre>             user                                            friends
10038  1917038415  1665245216 2290640996 3778652389 4087568415 55...
15439  1066372954  998633121 2372536210 2988650028 2856329375 479...
34751  2692015370  3904802979 1294147973 1074104319 2805407290 11...
17135  2671029253  1228475441 1768214926 2396573486 397666997 309...
9689   3257773536  1088466695 171390393 1534545823 106132502 4030...
22419  1067164735  629183709 2644711345 3839353322 1503925094 350...
20414  2039668267  1697731261 806007880 3560986767 517187946 1675...
29414  2416491105  1056047803 3191130783 1198196781 1646148934 80...
38451   905852095  2542552856 321804693 2749176086 2415509131 272...
23307  3893362486  1154912753 3308553030 3425309545 3292629264 26...
38532  3823320698  3884275744 1826673717 646850331 2798906413 393...
20483  3908243396  337684766 3408789316 1488142569 2395886581 242...
5058   3785115584  1081453502 1596718769 1331286446 2707750925 17...
34971  3258281955  1499368751 4195641138 2620344539 4094239608 24...
8282   1625530935  2265213067 4075960364 3885690650 4148192029 21...
6354   3492312016  647336762 1799023182 1005900562 1278424784 164...
12609  3681459280  2782819889 1901310537 1400854654 2732942345 19...
31594  3765513583  246299414 631254192 1718362867 187723915 46385...
37390  3269471699  1379637936 2539255188 25416666 1739626741 1627...
14181  3475233110  40956021 3382848269 2212253016 2593552244 3459...
7545   1679420385  329243624 3931194914 2807056066 4124056101 304...
8634    147627126  1418790921 2414779565 3957124466 2714644249 36...
29889  3031242464  2530289664 160417832 3098177915 1448856698 395...
19285  2071663365  3882476222 1379410697 729486889 4133093085 353...
8629   2162823560  631949964 2973363129 168588856 3525889830 3236...
12382  1882369333  292569783 133509082 3641769791 3630601616 2069...
1057   1349230619  2900847497 403965397 1171082896 1657802034 211...
25272  1889089758  1165230243 13300947 3852062571 2853124709 2492...
10204  2971846635  1483246054 246891423 1890621952 798312921 3368...
11524  3389773360  2564331507 3855093055 851992591 1995219350 148...
...           ...                                                ...
16123  2465513009  8846777 4199657340 3623162585 3441547565 71478...
19958  3424054391  1789337475 1240570706 1132593110 1282963953 19...
815    3138500404  2116571994 1694406816 4016200161 2910735200 41...
21283  1038960564  3875003107 1613715704 3953907778 1831104257 30...
2017   1802788012  2174084911 2751146552 2747945141 3524775039 63...
11280  3005728385  1499144083 2060403538 1539828586 1951934961 27...
7180   2054648409  2792315690 1962674336 2694462872 3454063111 32...
9320     97062150  3236841600 2990991159 3281534919 668063845 311...
4125    293229720  2467980416 1346449342 4239716699 2353791680 69...
30150  3721561384  4172967093 4292577784 3967520198 2102952816 31...
27698  2348719537  2752783835 2718800003 3855357934 293634422 709...
12915  1151239535  1717651423 4081878998 2413346481 955587678 768...
21622  2269787345  232732566 3402253639 3920411326 261986314 4161...
13968   306153925  3917410329 169506621 70424368 4270625774 23050...
14999  2794470551  745840013 3108457543 3173684979 3076442752 168...
7882   2609208135  2580902974 3354321049 1666736582 381607402 381...
34022  1313492534  1921271666 3475194085 3116671911 3278176097 26...
5604    893322374  1976578803 2552517859 1397692636 4024109025 36...
33808  1358222118  2893668588 2803527348 216267058 4033626882 229...
19999  2010045207  2130845297 3559385950 3116873874 2462424292 10...
18804  2116203935  1525755481 778426443 2588487054 703514907 6709...
5056   4278168842  300906357 1076165634 1590264036 2515407385 542...
22169  3317432819  1277236489 4191129862 3498469077 3591025408 18...
27758   531967718  301434010 900511024 1014835167 1482425186 2366...
16192   378788595  971116867 1419767373 2197647231 3323547841 160...
12170  2217853337  1483246054 1704337845 765045191 1347649029 329...
6151   3573553441  1857848801 3528110017 366202063 499247054 1556...
3063      4236494  2079929261 4035599682 1609007562 3162489799 16...
17871  2764881224  807096764 3676872343 3989472711 3258220935 352...
9194   1739369956  1076165634 4174432457 2159740684 82608564 1068...

[3391 rows x 2 columns]
</pre>
</div>
</div>

</div>
</div>

</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[19]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> 读入只在train和test数据集出现的活动信息</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="n">eventindex</span> <span class="o">=</span> <span class="n">pickle</span><span class="o">.</span><span class="n">load</span><span class="p">(</span><span class="nb">open</span><span class="p">(</span><span class="s1">&#39;eventIndex.pkl&#39;</span><span class="p">,</span><span class="s1">&#39;rb&#39;</span><span class="p">))</span>
<span class="n">nevents</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">eventindex</span><span class="o">.</span><span class="n">keys</span><span class="p">())</span>

<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> 生成userEventScores(用户对活动感兴趣)。</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="n">userEventScores</span> <span class="o">=</span> <span class="n">ss</span><span class="o">.</span><span class="n">dok_matrix</span><span class="p">((</span><span class="n">nusers</span><span class="p">,</span> <span class="n">nevents</span><span class="p">))</span>
<span class="n">ftrain</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="s2">&quot;train.csv&quot;</span><span class="p">)</span>
<span class="n">ftrain</span><span class="o">.</span><span class="n">readline</span><span class="p">()</span>
<span class="k">for</span> <span class="n">line</span> <span class="ow">in</span> <span class="n">ftrain</span><span class="p">:</span>
    <span class="n">cols</span> <span class="o">=</span> <span class="n">line</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">&quot;,&quot;</span><span class="p">)</span>
    <span class="n">i</span> <span class="o">=</span> <span class="n">userindex</span><span class="p">[</span><span class="n">cols</span><span class="p">[</span><span class="mi">0</span><span class="p">]]</span>
    <span class="n">j</span> <span class="o">=</span> <span class="n">eventindex</span><span class="p">[</span><span class="n">cols</span><span class="p">[</span><span class="mi">1</span><span class="p">]]</span>
    <span class="n">score</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">cols</span><span class="p">[</span><span class="mi">4</span><span class="p">])</span>
    <span class="n">userEventScores</span><span class="p">[</span><span class="n">i</span><span class="p">,</span><span class="n">j</span><span class="p">]</span> <span class="o">=</span> <span class="n">score</span>
<span class="n">ftrain</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>

<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> 统计每个用户好友的数量。</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="n">numFriends</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">zeros</span><span class="p">((</span><span class="n">nusers</span><span class="p">))</span>
<span class="c1"># FriendScore = ss.dok_matrix((nusers, nusers))</span>
<span class="k">for</span> <span class="n">idx</span><span class="p">,</span> <span class="n">val</span> <span class="ow">in</span> <span class="n">friend_user</span><span class="o">.</span><span class="n">iterrows</span><span class="p">():</span>
    <span class="n">friends</span> <span class="o">=</span> <span class="n">val</span><span class="p">[</span><span class="s1">&#39;friends&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">&#39; &#39;</span><span class="p">)</span>
    <span class="n">user_idx</span> <span class="o">=</span> <span class="n">userindex</span><span class="p">[</span><span class="n">val</span><span class="p">[</span><span class="s1">&#39;user&#39;</span><span class="p">]]</span>
    <span class="n">numFriends</span><span class="p">[</span><span class="n">user_idx</span><span class="p">]</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">friends</span><span class="p">)</span>
<span class="c1">#     for friend in friends:</span>
<span class="c1">#         if friend in userindex:</span>
<span class="c1">#             friend_idx = userindex[friend]</span>
<span class="c1">#             eventsForFriend = userEventScores.getrow(friend_idx).todense()</span>
<span class="c1">#             score = eventsForFriend.sum() / len(friends)</span>
<span class="c1">#             FriendScore[user_idx, friend_idx] += score</span>
<span class="c1">#             FriendScore[friend_idx, user_idx] += score</span>
</pre></div>

</div>
</div>
</div>

</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[20]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> 归一化数据</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="n">sumFriend</span> <span class="o">=</span> <span class="n">numFriends</span><span class="o">.</span><span class="n">sum</span><span class="p">(</span><span class="n">axis</span> <span class="o">=</span> <span class="mi">0</span><span class="p">)</span>
<span class="n">numFriends</span> <span class="o">=</span> <span class="n">numFriends</span> <span class="o">/</span> <span class="n">sumFriend</span>
<span class="n">sio</span><span class="o">.</span><span class="n">mmwrite</span><span class="p">(</span><span class="s1">&#39;numFriends&#39;</span><span class="p">,</span><span class="n">np</span><span class="o">.</span><span class="n">matrix</span><span class="p">(</span><span class="n">numFriends</span><span class="p">))</span>
<span class="nb">print</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">matrix</span><span class="p">(</span><span class="n">numFriends</span><span class="p">))</span>
</pre></div>

</div>
</div>
</div>

<div class="output_wrapper">
<div class="output">


<div class="output_area">

<div class="prompt"></div>


<div class="output_subarea output_stream output_stdout output_text">
<pre>[[  1.07363558e-05   2.72646930e-04   1.62175480e-04 ...,   1.68391264e-04
    2.54282111e-06   2.69539037e-04]]
</pre>
</div>
</div>

</div>
</div>

</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[21]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="c1"># FriendScore = normalize(FriendScore, norm=&quot;l1&quot;, axis=0, copy=False)</span>
<span class="c1"># sio.mmwrite(&quot;userFriendsScore&quot;, FriendScore)</span>
<span class="c1"># print(FriendScore)</span>
</pre></div>

</div>
</div>
</div>

</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<h3 id="&#27963;&#21160;&#25968;&#25454;&#30340;&#20998;&#26512;">&#27963;&#21160;&#25968;&#25454;&#30340;&#20998;&#26512;<a class="anchor-link" href="#&#27963;&#21160;&#25968;&#25454;&#30340;&#20998;&#26512;">&#182;</a></h3>
</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[22]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> 活动本身的分析</span>
<span class="sd"> 原有的event的数据量大。所以先分析在训练和测试集中出现的event的相关性</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="n">event_data</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">read_csv</span><span class="p">(</span><span class="s1">&#39;final_event.csv&#39;</span><span class="p">)</span>
<span class="n">event_content</span> <span class="o">=</span> <span class="n">event_data</span><span class="o">.</span><span class="n">iloc</span><span class="p">[:,</span><span class="mi">10</span><span class="p">:]</span>
<span class="n">event_other</span> <span class="o">=</span> <span class="n">event_data</span><span class="o">.</span><span class="n">iloc</span><span class="p">[:,:</span><span class="mi">10</span><span class="p">]</span>
<span class="nb">print</span><span class="p">(</span><span class="n">event_other</span><span class="o">.</span><span class="n">info</span><span class="p">())</span>
</pre></div>

</div>
</div>
</div>

<div class="output_wrapper">
<div class="output">


<div class="output_area">

<div class="prompt"></div>


<div class="output_subarea output_stream output_stdout output_text">
<pre>&lt;class &#39;pandas.core.frame.DataFrame&#39;&gt;
RangeIndex: 13418 entries, 0 to 13417
Data columns (total 10 columns):
Unnamed: 0    13418 non-null int64
event_id      13418 non-null int64
user_id       13418 non-null int64
start_time    13418 non-null object
city          6326 non-null object
state         4550 non-null object
zip           1414 non-null object
country       6353 non-null object
lat           8062 non-null float64
lng           8062 non-null float64
dtypes: float64(2), int64(3), object(5)
memory usage: 1.0+ MB
None
</pre>
</div>
</div>

</div>
</div>

</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[23]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> 缺失数据的处理</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="n">event_other</span><span class="p">[</span><span class="s1">&#39;city&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">fillna</span><span class="p">(</span><span class="s1">&#39;others&#39;</span><span class="p">,</span><span class="n">inplace</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
<span class="n">event_other</span><span class="p">[</span><span class="s1">&#39;state&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">fillna</span><span class="p">(</span><span class="s1">&#39;others&#39;</span><span class="p">,</span><span class="n">inplace</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
<span class="n">event_other</span><span class="p">[</span><span class="s1">&#39;country&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">fillna</span><span class="p">(</span><span class="s1">&#39;others&#39;</span><span class="p">,</span><span class="n">inplace</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</pre></div>

</div>
</div>
</div>

</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[24]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> 根据city出现的次数进行分类，形成一个新的特征。对city的出现次数小于60个的，分到‘others’类。大于60的，city类别不变，就是city自身</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="k">def</span> <span class="nf">getcity_cn</span><span class="p">(</span><span class="n">city_name</span><span class="p">):</span>
    <span class="n">city_cn</span> <span class="o">=</span> <span class="n">event_other</span><span class="p">[</span><span class="s1">&#39;city&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">value_counts</span><span class="p">()</span>
    <span class="k">for</span> <span class="n">idx</span><span class="p">,</span><span class="n">val</span> <span class="ow">in</span> <span class="n">city_cn</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
        <span class="k">if</span> <span class="n">city_name</span> <span class="o">==</span> <span class="n">idx</span><span class="p">:</span>
            <span class="k">if</span> <span class="n">val</span> <span class="o">&gt;=</span> <span class="mi">60</span><span class="p">:</span>
                <span class="k">return</span> <span class="n">idx</span>
            <span class="k">else</span><span class="p">:</span>
                <span class="k">return</span> <span class="s1">&#39;others&#39;</span>
<span class="n">event_other</span><span class="p">[</span><span class="s1">&#39;city_cat&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">event_other</span><span class="o">.</span><span class="n">apply</span><span class="p">(</span><span class="k">lambda</span> <span class="n">row</span> <span class="p">:</span> <span class="n">getcity_cn</span><span class="p">(</span><span class="n">row</span><span class="o">.</span><span class="n">city</span><span class="p">),</span><span class="n">axis</span> <span class="o">=</span> <span class="mi">1</span><span class="p">)</span>
</pre></div>

</div>
</div>
</div>

</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[25]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> 根据state出现的次数进行分类，形成一个新的特征。对state的出现次数小于50个的，分到‘others’类。大于60的，state类别不变，就是state自身</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="k">def</span> <span class="nf">getstat_cn</span><span class="p">(</span><span class="n">stat_name</span><span class="p">):</span>
    <span class="n">stat_cn</span> <span class="o">=</span> <span class="n">event_other</span><span class="p">[</span><span class="s1">&#39;state&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">value_counts</span><span class="p">()</span>
    <span class="k">for</span> <span class="n">idx</span><span class="p">,</span><span class="n">val</span> <span class="ow">in</span> <span class="n">stat_cn</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
        <span class="k">if</span> <span class="n">stat_name</span> <span class="o">==</span> <span class="n">idx</span><span class="p">:</span>
            <span class="k">if</span> <span class="n">val</span> <span class="o">&gt;=</span> <span class="mi">50</span><span class="p">:</span>
                <span class="k">return</span> <span class="n">idx</span>
            <span class="k">else</span><span class="p">:</span>
                <span class="k">return</span> <span class="s1">&#39;others&#39;</span> 
<span class="n">event_other</span><span class="p">[</span><span class="s1">&#39;stat_cat&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">event_other</span><span class="o">.</span><span class="n">apply</span><span class="p">(</span><span class="k">lambda</span> <span class="n">row</span> <span class="p">:</span> <span class="n">getstat_cn</span><span class="p">(</span><span class="n">row</span><span class="o">.</span><span class="n">state</span><span class="p">),</span><span class="n">axis</span> <span class="o">=</span> <span class="mi">1</span><span class="p">)</span>
</pre></div>

</div>
</div>
</div>

</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[26]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> 根据country出现的次数进行分类，形成一个新的特征。对country的出现次数小于50个的，分到‘others’类。</span>
<span class="sd"> 大于60的，country类别不变，就是country自身</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="k">def</span> <span class="nf">getcountry_cn</span><span class="p">(</span><span class="n">country_name</span><span class="p">):</span>
    <span class="n">country_cn</span> <span class="o">=</span> <span class="n">event_other</span><span class="p">[</span><span class="s1">&#39;country&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">value_counts</span><span class="p">()</span>
    <span class="k">for</span> <span class="n">idx</span><span class="p">,</span><span class="n">val</span> <span class="ow">in</span> <span class="n">country_cn</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
        <span class="k">if</span> <span class="n">country_name</span> <span class="o">==</span> <span class="n">idx</span><span class="p">:</span>
            <span class="k">if</span> <span class="n">val</span> <span class="o">&gt;=</span> <span class="mi">50</span><span class="p">:</span>
                <span class="k">return</span> <span class="n">idx</span>
            <span class="k">else</span><span class="p">:</span>
                <span class="k">return</span> <span class="s1">&#39;others&#39;</span> 
<span class="n">event_other</span><span class="p">[</span><span class="s1">&#39;country_cat&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">event_other</span><span class="o">.</span><span class="n">apply</span><span class="p">(</span><span class="k">lambda</span> <span class="n">row</span> <span class="p">:</span> <span class="n">getcountry_cn</span><span class="p">(</span><span class="n">row</span><span class="o">.</span><span class="n">country</span><span class="p">),</span><span class="n">axis</span> <span class="o">=</span> <span class="mi">1</span><span class="p">)</span>
</pre></div>

</div>
</div>
</div>

</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[27]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> 对缺失的lat和lng，用均值来填充</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="n">event_other</span><span class="p">[</span><span class="s1">&#39;lat&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">fillna</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">mean</span><span class="p">(</span><span class="n">event_other</span><span class="p">[</span><span class="s1">&#39;lat&#39;</span><span class="p">]),</span><span class="n">inplace</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
<span class="n">event_other</span><span class="p">[</span><span class="s1">&#39;lng&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">fillna</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">mean</span><span class="p">(</span><span class="n">event_other</span><span class="p">[</span><span class="s1">&#39;lng&#39;</span><span class="p">]),</span><span class="n">inplace</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</pre></div>

</div>
</div>
</div>

</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[28]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> 应为有了country和state的信息。个人觉得zip特征有些重复，可以删除</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="n">event_other</span><span class="o">.</span><span class="n">drop</span><span class="p">(</span><span class="s1">&#39;zip&#39;</span><span class="p">,</span><span class="n">axis</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span><span class="n">inplace</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</pre></div>

</div>
</div>
</div>

</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[29]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="nb">print</span><span class="p">(</span><span class="n">event_other</span><span class="o">.</span><span class="n">columns</span><span class="p">)</span>
</pre></div>

</div>
</div>
</div>

<div class="output_wrapper">
<div class="output">


<div class="output_area">

<div class="prompt"></div>


<div class="output_subarea output_stream output_stdout output_text">
<pre>Index([&#39;Unnamed: 0&#39;, &#39;event_id&#39;, &#39;user_id&#39;, &#39;start_time&#39;, &#39;city&#39;, &#39;state&#39;,
       &#39;country&#39;, &#39;lat&#39;, &#39;lng&#39;, &#39;city_cat&#39;, &#39;stat_cat&#39;, &#39;country_cat&#39;],
      dtype=&#39;object&#39;)
</pre>
</div>
</div>

</div>
</div>

</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[30]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd">  处理日期型字段，格式化成年+月的形式</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="k">def</span> <span class="nf">getStartTime</span><span class="p">(</span><span class="n">dateString</span><span class="p">):</span>
    <span class="c1">#dateString = &#39;2012-07-11T03:04:29.622Z&#39;</span>
    <span class="n">dt</span> <span class="o">=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">datetime</span><span class="o">.</span><span class="n">strptime</span><span class="p">(</span><span class="n">dateString</span><span class="p">,</span> <span class="s2">&quot;%Y-%m-</span><span class="si">%d</span><span class="s2">T%H:%M:%S.</span><span class="si">%f</span><span class="s2">Z&quot;</span><span class="p">)</span>
    <span class="k">return</span> <span class="s2">&quot;&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">([</span><span class="nb">str</span><span class="p">(</span><span class="n">dt</span><span class="o">.</span><span class="n">year</span><span class="p">),</span> <span class="nb">str</span><span class="p">(</span><span class="n">dt</span><span class="o">.</span><span class="n">month</span><span class="p">)])</span>
<span class="n">event_other</span><span class="p">[</span><span class="s1">&#39;start_time_format&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">event_other</span><span class="o">.</span><span class="n">apply</span><span class="p">(</span><span class="k">lambda</span> <span class="n">row</span><span class="p">:</span><span class="n">getStartTime</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">row</span><span class="p">[</span><span class="s1">&#39;start_time&#39;</span><span class="p">])),</span><span class="n">axis</span> <span class="o">=</span> <span class="mi">1</span><span class="p">)</span>
<span class="n">event_other</span><span class="o">.</span><span class="n">drop</span><span class="p">(</span><span class="s1">&#39;start_time&#39;</span><span class="p">,</span><span class="n">axis</span> <span class="o">=</span> <span class="mi">1</span><span class="p">,</span> <span class="n">inplace</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
<span class="n">event_other</span><span class="o">.</span><span class="n">drop</span><span class="p">(</span><span class="s1">&#39;city&#39;</span><span class="p">,</span><span class="n">axis</span> <span class="o">=</span> <span class="mi">1</span><span class="p">,</span> <span class="n">inplace</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
<span class="n">event_other</span><span class="o">.</span><span class="n">drop</span><span class="p">(</span><span class="s1">&#39;state&#39;</span><span class="p">,</span><span class="n">axis</span> <span class="o">=</span> <span class="mi">1</span><span class="p">,</span> <span class="n">inplace</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
<span class="n">event_other</span><span class="o">.</span><span class="n">drop</span><span class="p">(</span><span class="s1">&#39;country&#39;</span><span class="p">,</span><span class="n">axis</span> <span class="o">=</span> <span class="mi">1</span><span class="p">,</span> <span class="n">inplace</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</pre></div>

</div>
</div>
</div>

</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[31]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="nb">print</span><span class="p">(</span><span class="n">event_other</span><span class="o">.</span><span class="n">head</span><span class="p">(</span><span class="mi">10</span><span class="p">))</span>
</pre></div>

</div>
</div>
</div>

<div class="output_wrapper">
<div class="output">


<div class="output_area">

<div class="prompt"></div>


<div class="output_subarea output_stream output_stdout output_text">
<pre>   Unnamed: 0    event_id     user_id        lat        lng city_cat stat_cat  \
0           0   684921758  3647864012  25.727517 -24.807209   others   others   
1           1   244999119  3476440521  25.727517 -24.807209   others   others   
2           2  3928440935   517514445  25.727517 -24.807209   others   others   
3           3  2582345152   781585781  25.727517 -24.807209   others   others   
4           4  1051165850  1016098580  25.727517 -24.807209   others   others   
5           5  1212611096  1426522332  25.727517 -24.807209   others   others   
6           6  3689283674   725266702  25.727517 -24.807209   others   others   
7           7  2584113432   613687941  25.727517 -24.807209   others   others   
8           8  3365728297  1098509207  47.058000  21.926000   others   others   
9           9  2912638473  3598071768  25.727517 -24.807209   others   others   

  country_cat start_time_format  
0      others            201210  
1      others            201211  
2      others            201211  
3      others            201210  
4      others             20129  
5      others            201211  
6      others            201211  
7      others            201210  
8      others            201210  
9      others            201210  
</pre>
</div>
</div>

</div>
</div>

</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[32]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd">用 PCA 来分析c_1 到 c_other列的数据</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="kn">from</span> <span class="nn">sklearn.preprocessing</span> <span class="k">import</span> <span class="n">StandardScaler</span><span class="p">,</span><span class="n">MinMaxScaler</span>
<span class="kn">from</span> <span class="nn">sklearn.decomposition</span> <span class="k">import</span> <span class="n">PCA</span>
<span class="n">pca</span> <span class="o">=</span> <span class="n">PCA</span><span class="p">(</span><span class="n">n_components</span><span class="o">=</span><span class="mi">3</span><span class="p">,</span><span class="n">random_state</span> <span class="o">=</span> <span class="mi">1</span><span class="p">)</span>
<span class="n">std</span> <span class="o">=</span> <span class="n">MinMaxScaler</span><span class="p">()</span>
<span class="n">std</span><span class="o">.</span><span class="n">fit_transform</span><span class="p">(</span><span class="n">event_content</span><span class="p">)</span>
<span class="n">pca</span><span class="o">.</span><span class="n">fit</span><span class="p">(</span><span class="n">event_content</span><span class="p">)</span>
<span class="n">pca_train_data</span> <span class="o">=</span> <span class="n">pca</span><span class="o">.</span><span class="n">transform</span><span class="p">(</span><span class="n">event_content</span><span class="p">)</span>
<span class="nb">print</span><span class="p">(</span><span class="n">pca_train_data</span><span class="o">.</span><span class="n">shape</span><span class="p">)</span>
</pre></div>

</div>
</div>
</div>

<div class="output_wrapper">
<div class="output">


<div class="output_area">

<div class="prompt"></div>


<div class="output_subarea output_stream output_stdout output_text">
<pre>(13418, 3)
</pre>
</div>
</div>

</div>
</div>

</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[33]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="nb">print</span><span class="p">(</span><span class="n">pca_train_data</span><span class="p">)</span>
</pre></div>

</div>
</div>
</div>

<div class="output_wrapper">
<div class="output">


<div class="output_area">

<div class="prompt"></div>


<div class="output_subarea output_stream output_stdout output_text">
<pre>[[ -4.74318829e+01   1.09174202e+01  -7.82119332e-02]
 [ -4.93657138e+01   1.13923366e+01  -5.87672721e-03]
 [ -4.48256290e+01   9.29477031e+00  -5.21168410e-03]
 ..., 
 [ -4.67497348e+01   9.71984271e+00  -8.13669783e-02]
 [ -5.06341985e+01   1.07587718e+01   2.43489155e-01]
 [  7.28643605e+01  -1.78016095e+01   7.92160753e+00]]
</pre>
</div>
</div>

</div>
</div>

</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[34]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd">  PCA结果</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="kn">import</span> <span class="nn">matplotlib.pyplot</span> <span class="k">as</span> <span class="nn">plt</span>
<span class="k">def</span> <span class="nf">pca_results</span><span class="p">(</span><span class="n">event_data</span><span class="p">,</span> <span class="n">pca</span><span class="p">):</span>
    <span class="n">dimensions</span> <span class="o">=</span>  <span class="p">[</span><span class="s1">&#39;Dimension </span><span class="si">{}</span><span class="s1">&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">i</span><span class="p">)</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span><span class="nb">len</span><span class="p">(</span><span class="n">pca</span><span class="o">.</span><span class="n">components_</span><span class="p">)</span><span class="o">+</span><span class="mi">1</span><span class="p">)]</span>

    <span class="c1"># PCA components个数</span>
    <span class="n">components</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">round</span><span class="p">(</span><span class="n">pca</span><span class="o">.</span><span class="n">components_</span><span class="p">,</span> <span class="mi">5</span><span class="p">),</span> <span class="n">columns</span> <span class="o">=</span> <span class="n">event_data</span><span class="o">.</span><span class="n">keys</span><span class="p">())</span>
    <span class="n">components</span><span class="o">.</span><span class="n">index</span> <span class="o">=</span> <span class="n">dimensions</span>

    <span class="c1"># 创建bar plot图</span>
    <span class="n">fig</span><span class="p">,</span> <span class="n">ax</span> <span class="o">=</span> <span class="n">plt</span><span class="o">.</span><span class="n">subplots</span><span class="p">(</span><span class="n">figsize</span> <span class="o">=</span> <span class="p">(</span><span class="mi">14</span><span class="p">,</span><span class="mi">10</span><span class="p">))</span>
    
    <span class="nb">print</span><span class="p">(</span><span class="s1">&#39;Dimension 1 mainly element:&#39;</span><span class="p">,</span><span class="n">components</span><span class="o">.</span><span class="n">loc</span><span class="p">[</span><span class="s1">&#39;Dimension 1&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">ix</span><span class="p">[</span><span class="n">components</span><span class="o">.</span><span class="n">iloc</span><span class="p">[</span><span class="mi">0</span><span class="p">,:]</span> <span class="o">&gt;</span> <span class="mf">0.2</span><span class="p">])</span>

    <span class="n">components</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">ax</span> <span class="o">=</span> <span class="n">ax</span><span class="p">,</span> <span class="n">kind</span> <span class="o">=</span> <span class="s1">&#39;bar&#39;</span><span class="p">);</span>
    <span class="n">ax</span><span class="o">.</span><span class="n">set_ylabel</span><span class="p">(</span><span class="s2">&quot;Feature Weights&quot;</span><span class="p">)</span>
    <span class="n">ax</span><span class="o">.</span><span class="n">set_xticklabels</span><span class="p">(</span><span class="n">dimensions</span><span class="p">,</span> <span class="n">rotation</span><span class="o">=</span><span class="mi">0</span><span class="p">)</span>

    <span class="c1"># 显示explained variance ratios</span>
    <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">ev</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">pca</span><span class="o">.</span><span class="n">explained_variance_ratio_</span><span class="p">):</span>
        <span class="n">ax</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="n">i</span><span class="o">-</span><span class="mf">0.3</span><span class="p">,</span> <span class="n">ax</span><span class="o">.</span><span class="n">get_ylim</span><span class="p">()[</span><span class="mi">1</span><span class="p">],</span> <span class="s2">&quot;Explained Variance</span><span class="se">\n</span><span class="si">%.4f</span><span class="s2">&quot;</span><span class="o">%</span><span class="p">(</span><span class="n">ev</span><span class="p">))</span>

<span class="n">pca_result_pic</span> <span class="o">=</span> <span class="n">pca_results</span><span class="p">(</span><span class="n">event_content</span><span class="p">,</span> <span class="n">pca</span><span class="p">)</span>
<span class="n">plt</span><span class="o">.</span><span class="n">show</span><span class="p">()</span>
</pre></div>

</div>
</div>
</div>

<div class="output_wrapper">
<div class="output">


<div class="output_area">

<div class="prompt"></div>


<div class="output_subarea output_stream output_stderr output_text">
<pre>C:\ProgramData\Anaconda3\lib\site-packages\ipykernel_launcher.py:15: DeprecationWarning: 
.ix is deprecated. Please use
.loc for label based indexing or
.iloc for positional indexing

See the documentation here:
http://pandas.pydata.org/pandas-docs/stable/indexing.html#ix-indexer-is-deprecated
  from ipykernel import kernelapp as app
</pre>
</div>
</div>

<div class="output_area">

<div class="prompt"></div>


<div class="output_subarea output_stream output_stdout output_text">
<pre>Dimension 1 mainly element: c_other    0.96779
Name: Dimension 1, dtype: float64
</pre>
</div>
</div>

<div class="output_area">

<div class="prompt"></div>




<div class="output_png output_subarea ">
<img src="
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
D5+P5jNcjaSqM3bPAAAAAMQpRVG6bDbbQKzziGeKomTabLaccPYykgcAAAAAITCSBwAAACBiKisr
DfkfJEwAACAASURBVPX19emT10pLS89VVVX1xyqn2WAkDwAAALiBMZI3M0byAAAAAGAOUDABAAAA
QAgUTAAAAAAQAgUTAAAAAITAKXkAAADAPPLbN1flR/J+dxefisiHcHfv3p3x7LPPLtfr9WNCCPHo
o49+VFFRMSCEEN/85jez33jjjTQhhHjqqafObNu2LRCJ34wECiYAAAAAUWG32wM1NTU9k9f++7//
e7GiKMktLS3Nly5d0txxxx3mBx988Hx6evqVWOU5GSN5AAAAAGbF7XZnmEwmq9lstjocjpXXs7e5
uTnxc5/73McJCQkiNTX1itVqHX7ttdcWz1Wu14uCCQAAAEDYvF5vosvlkhsaGtrb2tpa9uzZ0xMq
9tChQ2kmk8laUlKS29HRkSCEELfeeuulN954Y/GFCxc0fX19C95+++3U3t7ehdF7gqujYAIAAAAQ
No/Hk2q32wOyLI8LIYRerw9OF7d58+bBnp6epvb29pbi4uILW7duXSmEEGVlZUP33HPP4IYNGywP
PvjgyvXr13+8YMECNZrPcDUUTAAAAADCpqqqkCRpxgLHYDAEk5KSVCGEqKioONvc3Jw8ca2qqqq/
tbW15e233z6pqqowmUyX5zLn60HBBAAAACBsJSUlQwcPHkzv7+/XCiGE3+/XThfX3d2dMPF3bW1t
Wm5u7ogQQoyPj4uJvX/4wx+SWltbk8vKys5HI/drwSl5AAAAwDwSqWPAr1VBQcGI0+nsKywstGg0
GjUvL2+4rq6ua2rczp07l3o8njStVqumpaWN79+/v0sIIUZHR6U777zTIoQQKSkpwVdeeeXDhISE
qdtjRlLVuBkPBAAAAHCdFEXpstlsA7HOI54pipJps9lywtnLSB4AAAAAhMBIHgAAAICIqaysNNTX
16dPXistLT1XVVXVH6ucZoORPAAAAOAGxkjezBjJAwAAAIA5QMEEAAAAACFQMAEAAABACBRMAAAA
ABACp+QBAAAA84jhyHv5kbxf/998OmIfwt27d++SF154YZkkSWL16tXDr7/+eqcQQvzkJz/JcLlc
shBCPPHEE33f/va3/xyp35wtCiYAAAAAc66pqUm3a9cu+fjx461ZWVlBn8+3QAgh/H6/tqqqatm7
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
By+77LLg9u3bJ15++eXVx44d0506dUpz2223TWk0Grn33ntH9+/fvyYmGzoLI3kAAAAAIuZyueKr
q6sNb7/9drfBYAgMDQ1pv87zg4ODuoyMjDNzf69fv/7M4OCg7tixYzqDweCfu37llVee8Xq9umjm
fj7oMAEAAACIWFtbW1JRUdFJg8EQEBHR6/XBr/N8qO/CKooS9nqsUTABAAAAiJiqqqIoyn9WN+cp
IyPDPzAwsGLu78HBwRXr1q3zG41G/9kdpWPHjq1IT0/3h15l8VAwAQAAAIhYfn7+RHNzc4rP59OK
fHmIw9d5vqSkZNzpdCYNDw9rh4eHtU6nM6mkpGT8yiuv9F966aWzr7/++qWzs7Py5z//ObW4uPgf
i7OL8HiHCQAAALiIROsY8POVk5MzY7fbvXl5eZkajUbNysqabmxs7D83zul0XvK9731v88TEhPb1
119P/s1vfrPuyJEjh/R6ffDxxx8/kZ2dbREReeKJJ07MjfU9/fTTx+6///4NMzMzyi233DJxzz33
jMdybyIiSqjZQAAAAAAXBrfb3W+z2UaWOo/lzO12r7XZbMZInmUkDwAAAADCYCQPAAAAQNRUVFSk
NzU1pZx9rbi4eKyqqsq3VDktBCN5AAAAwAWMkbz5MZIHAAAAAIuAggkAAAAAwqBgAgAAAIAwKJgA
AAAAIAxOyQMAAAAuIsaf/3d2NNfr/+13FvVDuPX19clWq3UmOzt7RkRk69at5urq6s+2b98+vZi/
e77oMAEAAABYMvv3708+ePDgqmisFQgEorHMv6FgAgAAALAgtbW1qSaTyWo2m60lJSUbQsV4PJ4V
27ZtM5lMJuu2bdtMvb29K1577bVLOzo6kh0OR0ZmZqb10KFDK0VE9u3bt+bqq6+2GI3GrNbW1gSR
L4uhBx98MCMrK8tiMpmsv/vd79aKiLzyyiuJubm5pqKiog1ms3lLtPfGSB4AAACAiLlcrvjq6mrD
22+/3W0wGAJDQ0PaUHEPPfTQFWVlZaOPPPLI6J49e1Iffvjhyzs6Ovpuu+22fxQWFo7fd999J+di
A4GA8vHHHx9+8cUXV//qV79al5+f79mzZ8/a1atXBz/55JPDp0+fVq6//vrMoqKiCRGRgwcPXvrh
hx8eyszMPBPt/dFhAgAAABCxtra2pKKiopMGgyEgIqLX64Oh4j788MNLH3jggTERkYcffnjsgw8+
SAi35j333HNSROTGG2+cGhgYWCEi0tHRkfTXv/41NTMz03rttddaTp48GdfV1RUvInLNNddMLUax
JEKHCQAAAMACqKoqiqKo0VwzPj5eFRGJi4uTYDCo/PN3lN///vfH77777omzY1955ZXESy65ZDaa
v382OkwAAAAAIpafnz/R3Nyc4vP5tCIi4Ubyrr322qk//vGPa0RE6urqUnJyck6JiCQkJAQnJibm
rUtuv/328WeeeeayL774QhEROXjw4MrzeW6h6DABAAAAF5HFPgb8XDk5OTN2u92bl5eXqdFo1Kys
rOnGxsb+c+OeeeaZ4zt37jQ+9dRT6ampqYEXXnihX0Tk3nvvHXv44YeNf/jDH/QvvfRSX7jfefTR
R0f6+/tXXn311RZVVZWUlBR/S0tL2PhoUVQ1qt0zAAAAADHkdrv7bTbbyFLnsZy53e61NpvNGMmz
jOQBAAAAQBiM5AEAAACImoqKivSmpqaUs68VFxePVVVV+ZYqp4VgJA8AAAC4gDGSNz9G8gAAAID/
vWZnZ2eVpU5iufrn/03Ex45TMAEAAAAXtk+Gh4dXUzT9p9nZWWV4eHi1iHwS6Rq8wwQAAABcwAKB
wH/5fL4/+ny+LKEhcq5ZEfkkEAj8V6QL8A4TAAAAAIRBBQoAAAAAYVAwAQAAAEAYFEwAAAAAEAYF
EwAAAACEQcEEAAAAAGH8f5H7pQZ4r/L2AAAAAElFTkSuQmCC
"
>
</div>

</div>

</div>
</div>

</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<h4 id="&#21487;&#20197;&#30475;&#21040;&#31532;&#19968;&#20010;&#20027;&#25104;&#20998;&#23545;&#24212;&#30340;&#20027;&#35201;&#26159;c_other">&#21487;&#20197;&#30475;&#21040;&#31532;&#19968;&#20010;&#20027;&#25104;&#20998;&#23545;&#24212;&#30340;&#20027;&#35201;&#26159;c_other<a class="anchor-link" href="#&#21487;&#20197;&#30475;&#21040;&#31532;&#19968;&#20010;&#20027;&#25104;&#20998;&#23545;&#24212;&#30340;&#20027;&#35201;&#26159;c_other">&#182;</a></h4>
</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[35]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> 将PCA分析的结果添加到event的数据集当中，降低维度</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="n">event_col</span> <span class="o">=</span> <span class="n">event_content</span><span class="o">.</span><span class="n">columns</span>
<span class="n">event_content</span><span class="o">.</span><span class="n">drop</span><span class="p">(</span><span class="n">event_col</span><span class="p">,</span><span class="n">axis</span> <span class="o">=</span> <span class="mi">1</span><span class="p">,</span> <span class="n">inplace</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
<span class="n">pca_train</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="p">(</span><span class="n">pca_train_data</span><span class="p">,</span><span class="n">columns</span> <span class="o">=</span> <span class="p">[</span><span class="s1">&#39;pca1&#39;</span><span class="p">,</span><span class="s1">&#39;pca2&#39;</span><span class="p">,</span><span class="s1">&#39;pca3&#39;</span><span class="p">],</span> <span class="n">index</span> <span class="o">=</span> <span class="n">event_content</span><span class="o">.</span><span class="n">index</span><span class="p">)</span>
<span class="n">event_content</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">concat</span><span class="p">([</span><span class="n">event_content</span><span class="p">,</span><span class="n">pca_train</span><span class="p">],</span> <span class="n">axis</span> <span class="o">=</span> <span class="mi">1</span><span class="p">)</span>
</pre></div>

</div>
</div>
</div>

</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[36]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="n">event_total</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">concat</span><span class="p">([</span><span class="n">event_other</span><span class="p">,</span><span class="n">event_content</span><span class="p">],</span><span class="n">axis</span> <span class="o">=</span> <span class="mi">1</span><span class="p">)</span>
</pre></div>

</div>
</div>
</div>

</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[37]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="nb">print</span><span class="p">(</span><span class="n">event_total</span><span class="o">.</span><span class="n">head</span><span class="p">(</span><span class="mi">10</span><span class="p">))</span>
</pre></div>

</div>
</div>
</div>

<div class="output_wrapper">
<div class="output">


<div class="output_area">

<div class="prompt"></div>


<div class="output_subarea output_stream output_stdout output_text">
<pre>   Unnamed: 0    event_id     user_id        lat        lng city_cat stat_cat  \
0           0   684921758  3647864012  25.727517 -24.807209   others   others   
1           1   244999119  3476440521  25.727517 -24.807209   others   others   
2           2  3928440935   517514445  25.727517 -24.807209   others   others   
3           3  2582345152   781585781  25.727517 -24.807209   others   others   
4           4  1051165850  1016098580  25.727517 -24.807209   others   others   
5           5  1212611096  1426522332  25.727517 -24.807209   others   others   
6           6  3689283674   725266702  25.727517 -24.807209   others   others   
7           7  2584113432   613687941  25.727517 -24.807209   others   others   
8           8  3365728297  1098509207  47.058000  21.926000   others   others   
9           9  2912638473  3598071768  25.727517 -24.807209   others   others   

  country_cat start_time_format        pca1       pca2       pca3  
0      others            201210  -47.431883  10.917420  -0.078212  
1      others            201211  -49.365714  11.392337  -0.005877  
2      others            201211  -44.825629   9.294770  -0.005212  
3      others            201210  -48.534187  10.637359  -0.131245  
4      others             20129  -47.567878  10.406038  -0.166265  
5      others            201211  -35.150451   6.888362  -0.459109  
6      others            201211  -29.314195   5.448826  -0.776007  
7      others            201210  286.923722 -78.090648  16.141210  
8      others            201210  -32.246007   6.153413  -0.596131  
9      others            201210  -53.273805  12.337416   0.297645  
</pre>
</div>
</div>

</div>
</div>

</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[38]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="n">eventindex</span> <span class="o">=</span> <span class="n">pickle</span><span class="o">.</span><span class="n">load</span><span class="p">(</span><span class="nb">open</span><span class="p">(</span><span class="s1">&#39;eventIndex.pkl&#39;</span><span class="p">,</span><span class="s1">&#39;rb&#39;</span><span class="p">))</span>
<span class="n">nevents</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">eventindex</span><span class="o">.</span><span class="n">keys</span><span class="p">())</span>
<span class="nb">print</span><span class="p">(</span><span class="n">nevents</span><span class="p">)</span>
</pre></div>

</div>
</div>
</div>

<div class="output_wrapper">
<div class="output">


<div class="output_area">

<div class="prompt"></div>


<div class="output_subarea output_stream output_stdout output_text">
<pre>13418
</pre>
</div>
</div>

</div>
</div>

</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[39]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd">  对字符数据进行LabelEncoder编码</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="n">lbl</span> <span class="o">=</span> <span class="n">LabelEncoder</span><span class="p">()</span>
<span class="n">city_cat_id</span> <span class="o">=</span> <span class="n">lbl</span><span class="o">.</span><span class="n">fit_transform</span><span class="p">(</span><span class="n">event_total</span><span class="p">[</span><span class="s1">&#39;city_cat&#39;</span><span class="p">])</span>
<span class="n">stat_cat_id</span> <span class="o">=</span> <span class="n">lbl</span><span class="o">.</span><span class="n">fit_transform</span><span class="p">(</span><span class="n">event_total</span><span class="p">[</span><span class="s1">&#39;stat_cat&#39;</span><span class="p">])</span>
<span class="n">country_cat_id</span> <span class="o">=</span> <span class="n">lbl</span><span class="o">.</span><span class="n">fit_transform</span><span class="p">(</span><span class="n">event_total</span><span class="p">[</span><span class="s1">&#39;country_cat&#39;</span><span class="p">])</span>
<span class="n">event_total</span><span class="p">[</span><span class="s1">&#39;city_cat_id&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">city_cat_id</span>
<span class="n">event_total</span><span class="p">[</span><span class="s1">&#39;stat_cat_id&#39;</span><span class="p">]</span> <span class="o">=</span>  <span class="n">stat_cat_id</span>
<span class="n">event_total</span><span class="p">[</span><span class="s1">&#39;country_cat_id&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">country_cat_id</span>
<span class="n">event_total</span><span class="o">.</span><span class="n">drop</span><span class="p">([</span><span class="s1">&#39;city_cat&#39;</span><span class="p">,</span><span class="s1">&#39;stat_cat&#39;</span><span class="p">,</span><span class="s1">&#39;country_cat&#39;</span><span class="p">],</span><span class="n">axis</span> <span class="o">=</span> <span class="mi">1</span><span class="p">,</span><span class="n">inplace</span> <span class="o">=</span> <span class="kc">True</span><span class="p">)</span>
</pre></div>

</div>
</div>
</div>

</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[40]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="nb">print</span><span class="p">(</span><span class="n">event_total</span><span class="o">.</span><span class="n">head</span><span class="p">(</span><span class="mi">10</span><span class="p">))</span>
</pre></div>

</div>
</div>
</div>

<div class="output_wrapper">
<div class="output">


<div class="output_area">

<div class="prompt"></div>


<div class="output_subarea output_stream output_stdout output_text">
<pre>   Unnamed: 0    event_id     user_id        lat        lng start_time_format  \
0           0   684921758  3647864012  25.727517 -24.807209            201210   
1           1   244999119  3476440521  25.727517 -24.807209            201211   
2           2  3928440935   517514445  25.727517 -24.807209            201211   
3           3  2582345152   781585781  25.727517 -24.807209            201210   
4           4  1051165850  1016098580  25.727517 -24.807209             20129   
5           5  1212611096  1426522332  25.727517 -24.807209            201211   
6           6  3689283674   725266702  25.727517 -24.807209            201211   
7           7  2584113432   613687941  25.727517 -24.807209            201210   
8           8  3365728297  1098509207  47.058000  21.926000            201210   
9           9  2912638473  3598071768  25.727517 -24.807209            201210   

         pca1       pca2       pca3  city_cat_id  stat_cat_id  country_cat_id  
0  -47.431883  10.917420  -0.078212           10           10              10  
1  -49.365714  11.392337  -0.005877           10           10              10  
2  -44.825629   9.294770  -0.005212           10           10              10  
3  -48.534187  10.637359  -0.131245           10           10              10  
4  -47.567878  10.406038  -0.166265           10           10              10  
5  -35.150451   6.888362  -0.459109           10           10              10  
6  -29.314195   5.448826  -0.776007           10           10              10  
7  286.923722 -78.090648  16.141210           10           10              10  
8  -32.246007   6.153413  -0.596131           10           10              10  
9  -53.273805  12.337416   0.297645           10           10              10  
</pre>
</div>
</div>

</div>
</div>

</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[41]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd">  将活动数据读入到矩阵中</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="n">eventMatrix</span> <span class="o">=</span> <span class="n">ss</span><span class="o">.</span><span class="n">dok_matrix</span><span class="p">((</span><span class="n">nevents</span><span class="p">,</span> <span class="mi">9</span><span class="p">))</span>
<span class="k">for</span> <span class="n">idx</span><span class="p">,</span><span class="n">val</span> <span class="ow">in</span> <span class="n">event_total</span><span class="o">.</span><span class="n">iterrows</span><span class="p">():</span>
    <span class="n">eventMatrix</span><span class="p">[</span><span class="n">eventindex</span><span class="p">[</span><span class="nb">str</span><span class="p">(</span><span class="n">val</span><span class="p">[</span><span class="s1">&#39;event_id&#39;</span><span class="p">])],</span><span class="mi">0</span><span class="p">]</span> <span class="o">=</span> <span class="n">val</span><span class="p">[</span><span class="s1">&#39;lat&#39;</span><span class="p">]</span>
    <span class="n">eventMatrix</span><span class="p">[</span><span class="n">eventindex</span><span class="p">[</span><span class="nb">str</span><span class="p">(</span><span class="n">val</span><span class="p">[</span><span class="s1">&#39;event_id&#39;</span><span class="p">])],</span> <span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="n">val</span><span class="p">[</span><span class="s1">&#39;lng&#39;</span><span class="p">]</span>
    <span class="n">eventMatrix</span><span class="p">[</span><span class="n">eventindex</span><span class="p">[</span><span class="nb">str</span><span class="p">(</span><span class="n">val</span><span class="p">[</span><span class="s1">&#39;event_id&#39;</span><span class="p">])],</span> <span class="mi">2</span><span class="p">]</span> <span class="o">=</span> <span class="n">val</span><span class="p">[</span><span class="s1">&#39;city_cat_id&#39;</span><span class="p">]</span>
    <span class="n">eventMatrix</span><span class="p">[</span><span class="n">eventindex</span><span class="p">[</span><span class="nb">str</span><span class="p">(</span><span class="n">val</span><span class="p">[</span><span class="s1">&#39;event_id&#39;</span><span class="p">])],</span> <span class="mi">3</span><span class="p">]</span> <span class="o">=</span> <span class="n">val</span><span class="p">[</span><span class="s1">&#39;stat_cat_id&#39;</span><span class="p">]</span>
    <span class="n">eventMatrix</span><span class="p">[</span><span class="n">eventindex</span><span class="p">[</span><span class="nb">str</span><span class="p">(</span><span class="n">val</span><span class="p">[</span><span class="s1">&#39;event_id&#39;</span><span class="p">])],</span> <span class="mi">4</span><span class="p">]</span> <span class="o">=</span> <span class="n">val</span><span class="p">[</span><span class="s1">&#39;country_cat_id&#39;</span><span class="p">]</span>
    <span class="n">eventMatrix</span><span class="p">[</span><span class="n">eventindex</span><span class="p">[</span><span class="nb">str</span><span class="p">(</span><span class="n">val</span><span class="p">[</span><span class="s1">&#39;event_id&#39;</span><span class="p">])],</span> <span class="mi">5</span><span class="p">]</span> <span class="o">=</span> <span class="n">val</span><span class="p">[</span><span class="s1">&#39;start_time_format&#39;</span><span class="p">]</span>
    <span class="n">eventMatrix</span><span class="p">[</span><span class="n">eventindex</span><span class="p">[</span><span class="nb">str</span><span class="p">(</span><span class="n">val</span><span class="p">[</span><span class="s1">&#39;event_id&#39;</span><span class="p">])],</span> <span class="mi">6</span><span class="p">]</span> <span class="o">=</span> <span class="n">val</span><span class="p">[</span><span class="s1">&#39;pca1&#39;</span><span class="p">]</span>
    <span class="n">eventMatrix</span><span class="p">[</span><span class="n">eventindex</span><span class="p">[</span><span class="nb">str</span><span class="p">(</span><span class="n">val</span><span class="p">[</span><span class="s1">&#39;event_id&#39;</span><span class="p">])],</span> <span class="mi">7</span><span class="p">]</span> <span class="o">=</span> <span class="n">val</span><span class="p">[</span><span class="s1">&#39;pca2&#39;</span><span class="p">]</span>
    <span class="n">eventMatrix</span><span class="p">[</span><span class="n">eventindex</span><span class="p">[</span><span class="nb">str</span><span class="p">(</span><span class="n">val</span><span class="p">[</span><span class="s1">&#39;event_id&#39;</span><span class="p">])],</span> <span class="mi">8</span><span class="p">]</span> <span class="o">=</span> <span class="n">val</span><span class="p">[</span><span class="s1">&#39;pca3&#39;</span><span class="p">]</span>
</pre></div>

</div>
</div>
</div>

</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[42]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="nb">print</span><span class="p">(</span><span class="n">eventMatrix</span><span class="p">)</span>
</pre></div>

</div>
</div>
</div>

<div class="output_wrapper">
<div class="output">


<div class="output_area">

<div class="prompt"></div>


<div class="output_subarea output_stream output_stdout output_text">
<pre>  (13311, 0)	25.7275173654
  (13311, 1)	-24.8072087571
  (13311, 2)	10.0
  (13311, 3)	10.0
  (13311, 4)	10.0
  (13311, 5)	201210.0
  (13311, 6)	-47.4318828593
  (13311, 7)	10.9174201988
  (13311, 8)	-0.0782119332383
  (4268, 0)	25.7275173654
  (4268, 1)	-24.8072087571
  (4268, 2)	10.0
  (4268, 3)	10.0
  (4268, 4)	10.0
  (4268, 5)	201211.0
  (4268, 6)	-49.3657138269
  (4268, 7)	11.3923366098
  (4268, 8)	-0.00587672720866
  (12170, 0)	25.7275173654
  (12170, 1)	-24.8072087571
  (12170, 2)	10.0
  (12170, 3)	10.0
  (12170, 4)	10.0
  (12170, 5)	201211.0
  (12170, 6)	-44.82562898
  :	:
  (9142, 2)	10.0
  (9142, 3)	7.0
  (9142, 4)	2.0
  (9142, 5)	20129.0
  (9142, 6)	-46.7497347622
  (9142, 7)	9.71984270719
  (9142, 8)	-0.0813669783032
  (7812, 0)	51.481
  (7812, 1)	-0.191
  (7812, 2)	2.0
  (7812, 3)	10.0
  (7812, 4)	8.0
  (7812, 5)	201210.0
  (7812, 6)	-50.634198503
  (7812, 7)	10.7587717718
  (7812, 8)	0.243489154636
  (11176, 0)	34.041
  (11176, 1)	-118.259
  (11176, 2)	3.0
  (11176, 3)	2.0
  (11176, 4)	9.0
  (11176, 5)	201210.0
  (11176, 6)	72.8643605139
  (11176, 7)	-17.8016095397
  (11176, 8)	7.92160753456
</pre>
</div>
</div>

</div>
</div>

</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[43]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> 对活动数据进行归一化</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="n">eventMatrix</span> <span class="o">=</span> <span class="n">normalize</span><span class="p">(</span><span class="n">eventMatrix</span><span class="p">,</span><span class="n">norm</span><span class="o">=</span><span class="s2">&quot;l1&quot;</span><span class="p">,</span> <span class="n">axis</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
<span class="n">sio</span><span class="o">.</span><span class="n">mmwrite</span><span class="p">(</span><span class="s2">&quot;eventMatrix&quot;</span><span class="p">,</span> <span class="n">eventMatrix</span><span class="p">)</span>
</pre></div>

</div>
</div>
</div>

</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[44]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd">  定义活动相关性矩阵。uniqueEventPairs指的是互相关联的活动，即至少一个活动被同一个用户行为过</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="n">eventSimMatrix</span> <span class="o">=</span> <span class="n">ss</span><span class="o">.</span><span class="n">dok_matrix</span><span class="p">((</span><span class="n">nevents</span><span class="p">,</span> <span class="n">nevents</span><span class="p">))</span>
<span class="n">uniqueEventPairs</span> <span class="o">=</span> <span class="n">pickle</span><span class="o">.</span><span class="n">load</span><span class="p">(</span><span class="nb">open</span><span class="p">(</span><span class="s1">&#39;PE_uniqueEventPairs.pkl&#39;</span><span class="p">,</span><span class="s1">&#39;rb&#39;</span><span class="p">))</span>
</pre></div>

</div>
</div>
</div>

</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[45]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> 调用scipy的矩阵距离计算公式来计算关联活动之间的相似度</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="k">for</span> <span class="n">e1</span><span class="p">,</span> <span class="n">e2</span> <span class="ow">in</span> <span class="n">uniqueEventPairs</span><span class="p">:</span>
    <span class="k">if</span> <span class="p">(</span><span class="n">e1</span><span class="p">,</span><span class="n">e2</span><span class="p">)</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">eventSimMatrix</span><span class="p">:</span>
        <span class="n">sim_event</span> <span class="o">=</span> <span class="n">sim</span><span class="p">(</span><span class="n">eventMatrix</span><span class="o">.</span><span class="n">getrow</span><span class="p">(</span><span class="n">e1</span><span class="p">)</span><span class="o">.</span><span class="n">todense</span><span class="p">(),</span><span class="n">eventMatrix</span><span class="o">.</span><span class="n">getrow</span><span class="p">(</span><span class="n">e2</span><span class="p">)</span><span class="o">.</span><span class="n">todense</span><span class="p">())</span>
        <span class="n">eventSimMatrix</span><span class="p">[</span><span class="n">e1</span><span class="p">,</span> <span class="n">e2</span><span class="p">]</span> <span class="o">=</span> <span class="n">sim_event</span>
        <span class="n">eventSimMatrix</span><span class="p">[</span><span class="n">e2</span><span class="p">,</span> <span class="n">e1</span><span class="p">]</span> <span class="o">=</span> <span class="n">sim_event</span>
<span class="n">sio</span><span class="o">.</span><span class="n">mmwrite</span><span class="p">(</span><span class="s2">&quot;eventSimMatrix&quot;</span><span class="p">,</span> <span class="n">eventSimMatrix</span><span class="p">)</span>
</pre></div>

</div>
</div>
</div>

</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[46]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="nb">print</span><span class="p">(</span><span class="n">eventSimMatrix</span><span class="p">)</span>
</pre></div>

</div>
</div>
</div>

<div class="output_wrapper">
<div class="output">


<div class="output_area">

<div class="prompt"></div>


<div class="output_subarea output_stream output_stdout output_text">
<pre>  (7824, 10981)	1.28904300841
  (10981, 7824)	1.28904300841
  (5473, 13047)	0.765231759626
  (13047, 5473)	0.765231759626
  (10876, 10301)	0.119161230729
  (10301, 10876)	0.119161230729
  (9885, 12223)	0.0197198492718
  (12223, 9885)	0.0197198492718
  (4489, 10774)	0.0810154953339
  (10774, 4489)	0.0810154953339
  (6592, 12273)	0.0588559726678
  (12273, 6592)	0.0588559726678
  (6017, 5362)	0.130003393254
  (5362, 6017)	0.130003393254
  (11629, 1596)	1.16976502293
  (1596, 11629)	1.16976502293
  (985, 11483)	0.0434849628755
  (11483, 985)	0.0434849628755
  (8355, 5599)	0.413423388011
  (5599, 8355)	0.413423388011
  (4099, 9043)	1.20388094594
  (9043, 4099)	1.20388094594
  (1957, 10267)	0.619660998036
  (10267, 1957)	0.619660998036
  (2088, 60)	0.692021177072
  :	:
  (13163, 1767)	0.228485205359
  (5284, 10109)	0.551781586632
  (10109, 5284)	0.551781586632
  (3618, 2013)	0.479349942725
  (2013, 3618)	0.479349942725
  (4722, 5270)	1.34743375475
  (5270, 4722)	1.34743375475
  (9128, 888)	0.00443369166794
  (888, 9128)	0.00443369166794
  (3521, 2585)	1.10634587755
  (2585, 3521)	1.10634587755
  (9231, 8341)	0.093128192556
  (8341, 9231)	0.093128192556
  (3123, 8046)	0.837450150282
  (8046, 3123)	0.837450150282
  (6932, 4544)	0.234817808834
  (4544, 6932)	0.234817808834
  (10499, 6581)	0.00813226462311
  (6581, 10499)	0.00813226462311
  (8776, 7250)	0.996877727543
  (7250, 8776)	0.996877727543
  (4882, 9512)	0.104618538259
  (9512, 4882)	0.104618538259
  (12446, 8166)	0.979041560079
  (8166, 12446)	0.979041560079
</pre>
</div>
</div>

</div>
</div>

</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[47]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> 分析活动的参与和不参与的比例</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="n">nevents</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">eventindex</span><span class="p">)</span>
<span class="n">eventjoin</span> <span class="o">=</span> <span class="n">ss</span><span class="o">.</span><span class="n">dok_matrix</span><span class="p">((</span><span class="n">nevents</span><span class="p">,</span> <span class="mi">1</span><span class="p">))</span>
<span class="n">f</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="s2">&quot;event_attendees.csv&quot;</span><span class="p">)</span>
<span class="n">f</span><span class="o">.</span><span class="n">readline</span><span class="p">()</span>
<span class="k">for</span> <span class="n">line</span> <span class="ow">in</span> <span class="n">f</span><span class="p">:</span>
  <span class="n">cols</span> <span class="o">=</span> <span class="n">line</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">&quot;,&quot;</span><span class="p">)</span>
  <span class="n">eventId</span> <span class="o">=</span> <span class="n">cols</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
  <span class="k">if</span> <span class="n">eventId</span> <span class="ow">in</span> <span class="n">eventindex</span><span class="p">:</span>
    <span class="n">i</span> <span class="o">=</span> <span class="n">eventindex</span><span class="p">[</span><span class="n">eventId</span><span class="p">]</span>
    <span class="n">eventjoin</span><span class="p">[</span><span class="n">i</span><span class="p">,</span> <span class="mi">0</span><span class="p">]</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">cols</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">&quot; &quot;</span><span class="p">))</span> <span class="o">-</span> <span class="nb">len</span><span class="p">(</span><span class="n">cols</span><span class="p">[</span><span class="mi">4</span><span class="p">]</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">&quot; &quot;</span><span class="p">))</span>
<span class="n">f</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
<span class="c1">#eventjoin = normalize(eventjoin, norm=&quot;l1&quot;, axis=0, copy=False)</span>
<span class="n">sio</span><span class="o">.</span><span class="n">mmwrite</span><span class="p">(</span><span class="s2">&quot;eventjoin&quot;</span><span class="p">,</span> <span class="n">eventjoin</span><span class="p">)</span>
<span class="nb">print</span><span class="p">(</span><span class="n">eventjoin</span><span class="p">)</span>
</pre></div>

</div>
</div>
</div>

<div class="output_wrapper">
<div class="output">


<div class="output_area">

<div class="prompt"></div>


<div class="output_subarea output_stream output_stdout output_text">
<pre>  (3314, 0)	16.0
  (3675, 0)	27.0
  (5434, 0)	-3.0
  (8549, 0)	21.0
  (3882, 0)	6.0
  (12058, 0)	28.0
  (7572, 0)	99.0
  (1020, 0)	28.0
  (1876, 0)	-13.0
  (2705, 0)	2.0
  (2526, 0)	14.0
  (6301, 0)	7.0
  (4886, 0)	9.0
  (7480, 0)	7.0
  (5738, 0)	222.0
  (2047, 0)	19.0
  (11482, 0)	3.0
  (5358, 0)	7.0
  (8350, 0)	13.0
  (10179, 0)	6.0
  (12050, 0)	-38.0
  (8345, 0)	30.0
  (11084, 0)	5.0
  (900, 0)	10.0
  (8396, 0)	14.0
  :	:
  (5725, 0)	1.0
  (4468, 0)	8.0
  (9255, 0)	6.0
  (5472, 0)	98.0
  (9777, 0)	-7.0
  (6716, 0)	5.0
  (10373, 0)	142.0
  (10588, 0)	5.0
  (1132, 0)	15.0
  (1386, 0)	2.0
  (1407, 0)	21.0
  (7367, 0)	9.0
  (8331, 0)	-137.0
  (12274, 0)	-176.0
  (2586, 0)	7.0
  (5184, 0)	8.0
  (12412, 0)	-25.0
  (2930, 0)	21.0
  (10340, 0)	60.0
  (9438, 0)	4.0
  (13089, 0)	-1.0
  (4124, 0)	7.0
  (7962, 0)	11.0
  (6577, 0)	9.0
  (3560, 0)	5.0
</pre>
</div>
</div>

</div>
</div>

</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<h3 id="&#22522;&#20110;&#21069;&#38754;&#29983;&#25104;&#30340;&#29992;&#25143;&#21644;&#27963;&#21160;&#30456;&#20284;&#24230;&#25968;&#25454;&#65292;&#29992;&#21327;&#21516;&#36807;&#28388;&#29983;&#25104;&#26032;&#30340;&#29305;&#24449;.-&#29992;&#25143;&#21644;&#27963;&#21160;&#30340;&#21327;&#21516;&#36807;&#28388;&#37117;&#26159;&#22522;&#20110;&#19979;&#38754;UserCF&#31639;&#27861;">&#22522;&#20110;&#21069;&#38754;&#29983;&#25104;&#30340;&#29992;&#25143;&#21644;&#27963;&#21160;&#30456;&#20284;&#24230;&#25968;&#25454;&#65292;&#29992;&#21327;&#21516;&#36807;&#28388;&#29983;&#25104;&#26032;&#30340;&#29305;&#24449;. &#29992;&#25143;&#21644;&#27963;&#21160;&#30340;&#21327;&#21516;&#36807;&#28388;&#37117;&#26159;&#22522;&#20110;&#19979;&#38754;UserCF&#31639;&#27861;<a class="anchor-link" href="#&#22522;&#20110;&#21069;&#38754;&#29983;&#25104;&#30340;&#29992;&#25143;&#21644;&#27963;&#21160;&#30456;&#20284;&#24230;&#25968;&#25454;&#65292;&#29992;&#21327;&#21516;&#36807;&#28388;&#29983;&#25104;&#26032;&#30340;&#29305;&#24449;.-&#29992;&#25143;&#21644;&#27963;&#21160;&#30340;&#21327;&#21516;&#36807;&#28388;&#37117;&#26159;&#22522;&#20110;&#19979;&#38754;UserCF&#31639;&#27861;">&#182;</a></h3><p><img src="attachment:image.png" alt="image.png"></p>

</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[48]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> 基于用户相关性和用户对活动的评分情况进行基于用户协同过滤,得到指定用户对指定活动的关注度</span>
<span class="sd"> 用某一个用户和其他所有用户的相似度去乘以所有用户对某一活动的感兴趣程度，就得到这个用户对这个活动的感兴趣程度。</span>
<span class="sd">&quot;&quot;&quot;</span>

<span class="k">def</span> <span class="nf">UserRecommend</span><span class="p">(</span><span class="n">user_id</span><span class="p">,</span><span class="n">event_id</span><span class="p">):</span>
    <span class="n">user_idx</span> <span class="o">=</span> <span class="n">userindex</span><span class="p">[</span><span class="n">user_id</span><span class="p">]</span>
    <span class="n">event_idx</span> <span class="o">=</span> <span class="n">eventindex</span><span class="p">[</span><span class="n">event_id</span><span class="p">]</span>
    
    <span class="n">user_sim</span> <span class="o">=</span> <span class="n">userSimMatrix</span><span class="p">[</span><span class="n">user_idx</span><span class="p">,:]</span>
    <span class="n">event_score</span> <span class="o">=</span> <span class="n">userEventScores</span><span class="p">[:,</span><span class="n">event_idx</span><span class="p">]</span>
    
    <span class="n">user_event_sim</span> <span class="o">=</span> <span class="n">user_sim</span> <span class="o">*</span> <span class="n">event_score</span>
    <span class="c1">#如果用户对这个活动有兴趣，需要去掉</span>
    <span class="k">return</span> <span class="n">user_event_sim</span><span class="p">[</span><span class="mi">0</span><span class="p">,</span><span class="mi">0</span><span class="p">]</span> <span class="o">-</span> <span class="n">userEventScores</span><span class="p">[</span><span class="n">user_idx</span><span class="p">,</span><span class="n">event_idx</span><span class="p">]</span>
</pre></div>

</div>
</div>
</div>

</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[49]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> 统计每个用户好友的数据</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="k">def</span> <span class="nf">getUserFriendCount</span><span class="p">(</span><span class="n">user_id</span><span class="p">):</span>
    <span class="sd">&quot;&quot;&quot;</span>
<span class="sd">    &quot;&quot;&quot;</span>
    <span class="k">if</span> <span class="n">user_id</span> <span class="ow">in</span> <span class="n">userindex</span><span class="p">:</span>
      <span class="n">user_idx</span> <span class="o">=</span> <span class="n">userindex</span><span class="p">[</span><span class="n">user_id</span><span class="p">]</span>
      <span class="nb">print</span><span class="p">(</span><span class="n">user_idx</span><span class="p">)</span>
      <span class="k">try</span><span class="p">:</span>
        <span class="k">return</span> <span class="n">numFriends</span><span class="p">[</span><span class="n">user_idx</span><span class="p">]</span>
      <span class="k">except</span> <span class="ne">IndexError</span><span class="p">:</span>
        <span class="k">return</span> <span class="mi">0</span>
    <span class="k">else</span><span class="p">:</span>
      <span class="k">return</span> <span class="mi">0</span>
</pre></div>

</div>
</div>
</div>

</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[50]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> 活动的参与情况</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="k">def</span> <span class="nf">eventjoinval</span><span class="p">(</span><span class="n">eventId</span><span class="p">):</span>
    <span class="n">i</span> <span class="o">=</span> <span class="n">eventindex</span><span class="p">[</span><span class="n">eventId</span><span class="p">]</span>
    <span class="k">return</span> <span class="nb">round</span><span class="p">(</span><span class="n">eventjoin</span><span class="p">[</span><span class="n">i</span><span class="p">,</span> <span class="mi">0</span><span class="p">],</span><span class="mi">5</span><span class="p">)</span>
</pre></div>

</div>
</div>
</div>

</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[51]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> 基于活动的协同过滤分析</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="k">def</span> <span class="nf">EventRecommand</span><span class="p">(</span><span class="n">user_id</span><span class="p">,</span><span class="n">event_id</span><span class="p">):</span>

    <span class="n">user_idx</span> <span class="o">=</span> <span class="n">userindex</span><span class="p">[</span><span class="n">user_id</span><span class="p">]</span>
    <span class="n">event_idx</span> <span class="o">=</span> <span class="n">eventindex</span><span class="p">[</span><span class="n">event_id</span><span class="p">]</span>
    
    <span class="n">event_score</span> <span class="o">=</span> <span class="n">userEventScores</span><span class="p">[</span><span class="n">user_idx</span><span class="p">,:]</span>
    <span class="n">event_sim</span> <span class="o">=</span> <span class="n">eventSimMatrix</span><span class="p">[:,</span><span class="n">event_idx</span><span class="p">]</span>
    
    <span class="n">event_user_sim</span> <span class="o">=</span> <span class="n">event_score</span><span class="o">*</span><span class="n">event_sim</span>
    <span class="k">return</span> <span class="p">(</span><span class="n">event_user_sim</span><span class="p">[</span><span class="mi">0</span><span class="p">,</span><span class="mi">0</span><span class="p">]</span> <span class="o">-</span> <span class="n">userEventScores</span><span class="p">[</span><span class="n">user_idx</span><span class="p">,</span><span class="n">event_idx</span><span class="p">])</span>
</pre></div>

</div>
</div>
</div>

</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[52]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="c1"># ftrain = open(&quot;train.csv&quot;)</span>
<span class="c1"># ftrain.readline()</span>
<span class="c1"># for line in ftrain:</span>
<span class="c1">#     cols = line.strip().split(&quot;,&quot;)</span>
<span class="c1">#     userrem = UserRecommend(cols[0],cols[1])</span>
<span class="c1">#     friendcount = getUserFriendCount(cols[0])</span>
<span class="c1">#     eventjoin_cn = eventjoinval(cols[1])</span>
<span class="c1">#     eventrem = EventRecommand(cols[0],cols[1])</span>
<span class="c1">#     invite = cols[2]</span>
<span class="c1">#     new_train_data = pd.DataFrame(columns =[&#39;userrem&#39;,&#39;eventrem&#39;,&#39;invite&#39;,&#39;friendcount&#39;,&#39;eventjoin&#39;,&#39;interest&#39;,&#39;no_interest&#39;])</span>
<span class="c1">#     new_train_data_val = [userrem,eventrem,invite,friendcount,eventjoin_cn,cols[4],cols[5]]</span>
<span class="c1">#     print(new_train_data_val)</span>
<span class="c1">#     new_train_data = new_train_data.append(new_train_data_val)</span>
<span class="c1"># ftrain.close()</span>
</pre></div>

</div>
</div>
</div>

</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[68]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="n">fin</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="s2">&quot;train.csv&quot;</span><span class="p">)</span>
<span class="n">fin</span><span class="o">.</span><span class="n">readline</span><span class="p">()</span>
<span class="n">fout</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="s2">&quot;new_data_train.csv&quot;</span> <span class="p">,</span> <span class="s1">&#39;w&#39;</span><span class="p">)</span>
<span class="n">columns</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;userrem&quot;</span><span class="p">,</span><span class="s2">&quot;eventrem&quot;</span><span class="p">,</span><span class="s2">&quot;invite&quot;</span><span class="p">,</span><span class="s2">&quot;friendcount&quot;</span><span class="p">,</span><span class="s2">&quot;eventjoin&quot;</span><span class="p">,</span><span class="s2">&quot;interested&quot;</span><span class="p">,</span><span class="s2">&quot;not_interested&quot;</span><span class="p">]</span>
<span class="n">fout</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="s2">&quot;,&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">columns</span><span class="p">)</span> <span class="o">+</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">)</span>
<span class="n">ln</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">for</span> <span class="n">line</span> <span class="ow">in</span> <span class="n">fin</span><span class="p">:</span>
    <span class="n">cols</span> <span class="o">=</span> <span class="n">line</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">&quot;,&quot;</span><span class="p">)</span>
    <span class="n">user_id</span> <span class="o">=</span> <span class="n">cols</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
    <span class="n">event_id</span> <span class="o">=</span> <span class="n">cols</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
    <span class="n">invited</span> <span class="o">=</span> <span class="n">cols</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span>
    <span class="k">if</span> <span class="n">ln</span><span class="o">%</span><span class="k">500</span> == 0:
        <span class="nb">print</span> <span class="p">(</span><span class="s2">&quot;userId: </span><span class="si">{}</span><span class="s2">, eventId: </span><span class="si">{}</span><span class="s2">&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">user_id</span><span class="p">,</span> <span class="n">event_id</span><span class="p">))</span>
    <span class="n">userrem</span> <span class="o">=</span> <span class="n">UserRecommend</span><span class="p">(</span><span class="n">cols</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span><span class="n">cols</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span>
    <span class="n">friendcount</span> <span class="o">=</span> <span class="n">getUserFriendCount</span><span class="p">(</span><span class="n">cols</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
    <span class="n">eventjoin_cn</span> <span class="o">=</span> <span class="n">eventjoinval</span><span class="p">(</span><span class="n">cols</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span>
    <span class="n">eventrem</span> <span class="o">=</span> <span class="n">EventRecommand</span><span class="p">(</span><span class="n">cols</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span><span class="n">cols</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span>
    <span class="n">invite</span> <span class="o">=</span> <span class="n">cols</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span>
    <span class="n">value</span> <span class="o">=</span> <span class="p">[</span><span class="n">userrem</span><span class="p">,</span> <span class="n">eventrem</span><span class="p">,</span><span class="n">invite</span><span class="p">,</span><span class="n">friendcount</span><span class="p">,</span> <span class="n">eventjoin_cn</span><span class="p">,</span><span class="n">cols</span><span class="p">[</span><span class="mi">4</span><span class="p">],</span><span class="n">cols</span><span class="p">[</span><span class="mi">5</span><span class="p">]]</span>
    <span class="n">fout</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="s2">&quot;,&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="nb">map</span><span class="p">(</span><span class="k">lambda</span> <span class="n">x</span><span class="p">:</span> <span class="nb">str</span><span class="p">(</span><span class="n">x</span><span class="p">),</span> <span class="n">value</span><span class="p">))</span> <span class="o">+</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">)</span>
    <span class="c1">#fout.write(&quot;,&quot;.join(str(value) + &quot;\n&quot;))</span>
<span class="n">fin</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
<span class="n">fout</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
</pre></div>

</div>
</div>
</div>

<div class="output_wrapper">
<div class="output">


<div class="output_area">

<div class="prompt"></div>


<div class="output_subarea output_stream output_stdout output_text">
<pre>1312
userId: 3987610774, eventId: 445098029
1312
userId: 3987610774, eventId: 404595428
1312
userId: 3987610774, eventId: 4203627753
1312
userId: 3987610774, eventId: 2585327580
1312
userId: 3987610774, eventId: 1968459057
1312
userId: 3987610774, eventId: 4232519602
1312
userId: 3987610774, eventId: 3984042837
1312
userId: 3987610774, eventId: 1597380017
1312
userId: 3987610774, eventId: 675888033
1312
userId: 3990579831, eventId: 1392829984
2752
userId: 3990579831, eventId: 1368920193
2752
userId: 3990579831, eventId: 3234626838
2752
userId: 3990579831, eventId: 1271330281
2752
userId: 3990579831, eventId: 3830003912
2752
userId: 3990579831, eventId: 2262878747
2752
userId: 3990579831, eventId: 467130966
2752
userId: 3990579831, eventId: 738179988
2752
userId: 3990579831, eventId: 1605110491
2752
userId: 3994781966, eventId: 3504715371
2209
userId: 3994781966, eventId: 3643995431
2209
userId: 3994781966, eventId: 1838041662
2209
userId: 3994781966, eventId: 3313954564
2209
userId: 3994781966, eventId: 2279347311
2209
userId: 3994781966, eventId: 3595651948
2209
userId: 3995442796, eventId: 963733660
2927
userId: 3995442796, eventId: 1030590642
2927
userId: 3995442796, eventId: 146887909
2927
userId: 3995442796, eventId: 3115754876
2927
userId: 3995442796, eventId: 1213812933
2927
userId: 3995442796, eventId: 4158715763
2927
userId: 3995442796, eventId: 2209880365
2927
userId: 3995442796, eventId: 4155847923
2927
userId: 3998399905, eventId: 2499367081
1920
userId: 3998399905, eventId: 326944617
1920
userId: 3998399905, eventId: 4032767837
1920
userId: 3998399905, eventId: 822419493
1920
userId: 3998399905, eventId: 519818482
1920
userId: 3998399905, eventId: 202137419
1920
userId: 3998399905, eventId: 2317641938
1920
userId: 3998399905, eventId: 1611628639
1920
userId: 3998399905, eventId: 1492911169
1920
userId: 3998399905, eventId: 477927278
1920
userId: 3998399905, eventId: 3244922451
1920
userId: 3998399905, eventId: 3497374203
1920
userId: 4000106370, eventId: 1075421435
1775
userId: 4000106370, eventId: 2865762984
1775
userId: 4000106370, eventId: 2150848115
1775
userId: 4000106370, eventId: 4170108374
1775
userId: 4000106370, eventId: 2732461028
1775
userId: 4000106370, eventId: 3496460337
1775
userId: 4000106370, eventId: 3289683998
1775
userId: 4000106370, eventId: 2144500590
1775
userId: 4001997352, eventId: 1558108450
1575
userId: 4001997352, eventId: 4013172735
1575
userId: 4001997352, eventId: 37626417
1575
userId: 4001997352, eventId: 1066839399
1575
userId: 4001997352, eventId: 442959264
1575
userId: 4001997352, eventId: 3385885030
1575
userId: 4002956902, eventId: 952519340
1671
userId: 4002956902, eventId: 1816813281
1671
userId: 4002956902, eventId: 2549322104
1671
userId: 4002956902, eventId: 2098941988
1671
userId: 4002956902, eventId: 3103100779
1671
userId: 4002956902, eventId: 1269035551
1671
userId: 4002956902, eventId: 2007279414
1671
userId: 4002956902, eventId: 1076364848
1671
userId: 4002956902, eventId: 3309338938
1671
userId: 4005594979, eventId: 2934155652
3327
userId: 4005594979, eventId: 767955252
3327
userId: 4005594979, eventId: 1461681213
3327
userId: 4005594979, eventId: 2979976507
3327
userId: 4005594979, eventId: 1148122335
3327
userId: 4005594979, eventId: 3899724307
3327
userId: 4005604348, eventId: 3061224963
1517
userId: 4005604348, eventId: 1462294722
1517
userId: 4005604348, eventId: 3160682436
1517
userId: 4005604348, eventId: 3160682436
1517
userId: 4005604348, eventId: 1607857123
1517
userId: 4005604348, eventId: 3588120089
1517
userId: 4005604348, eventId: 4043937476
1517
userId: 4005604348, eventId: 637801371
1517
userId: 4005604348, eventId: 1045903606
1517
userId: 4005604348, eventId: 637801371
1517
userId: 4005604348, eventId: 4043937476
1517
userId: 4005604348, eventId: 3317453113
1517
userId: 4005604348, eventId: 3965376459
1517
userId: 4005906279, eventId: 1085259815
3110
userId: 4005906279, eventId: 2589709809
3110
userId: 4005906279, eventId: 3114539041
3110
userId: 4005906279, eventId: 3451398154
3110
userId: 4005906279, eventId: 2066735480
3110
userId: 4005906279, eventId: 2320431814
3110
userId: 4007830365, eventId: 3135875350
31
userId: 4007830365, eventId: 4125421459
31
userId: 4007830365, eventId: 3875790954
31
userId: 4007830365, eventId: 2905482756
31
userId: 4007830365, eventId: 850932284
31
userId: 4007830365, eventId: 3956263256
31
userId: 4007830365, eventId: 3434513569
31
userId: 4007830365, eventId: 3566919263
31
userId: 4007830365, eventId: 3633605689
31
userId: 4007830365, eventId: 3781958177
31
userId: 4007830365, eventId: 493515244
31
userId: 4007830365, eventId: 3409015015
31
userId: 4007974189, eventId: 2781837253
1935
userId: 4007974189, eventId: 1873283368
1935
userId: 4007974189, eventId: 580320955
1935
userId: 4007974189, eventId: 946418622
1935
userId: 4007974189, eventId: 3189486214
1935
userId: 4007974189, eventId: 1439840835
1935
userId: 4012638060, eventId: 2397776798
267
userId: 4012638060, eventId: 2081500137
267
userId: 4012638060, eventId: 2291983990
267
userId: 4012638060, eventId: 3967878081
267
userId: 4012638060, eventId: 3929337192
267
userId: 4020164258, eventId: 3578484232
870
userId: 4020164258, eventId: 85610883
870
userId: 4020164258, eventId: 1446608996
870
userId: 4020164258, eventId: 372011842
870
userId: 4020164258, eventId: 73087107
870
userId: 4020164258, eventId: 1746873846
870
userId: 4020164258, eventId: 3703682520
870
userId: 4024053152, eventId: 1203717384
505
userId: 4024053152, eventId: 268233790
505
userId: 4024053152, eventId: 2149464820
505
userId: 4024053152, eventId: 516796945
505
userId: 4024053152, eventId: 910169576
505
userId: 4024053152, eventId: 2007279414
505
userId: 4024104633, eventId: 2087832234
3157
userId: 4024104633, eventId: 1509550896
3157
userId: 4024104633, eventId: 3098796729
3157
userId: 4024104633, eventId: 3146701974
3157
userId: 4024104633, eventId: 4213029513
3157
userId: 4024104633, eventId: 816254504
3157
userId: 4024104633, eventId: 3541488061
3157
userId: 4026562594, eventId: 3793452317
1952
userId: 4026562594, eventId: 2086279157
1952
userId: 4026562594, eventId: 1068825763
1952
userId: 4026562594, eventId: 3480624055
1952
userId: 4026562594, eventId: 3889235854
1952
userId: 4026562594, eventId: 843570927
1952
userId: 4026562594, eventId: 1064770050
1952
userId: 4030714899, eventId: 1121879381
63
userId: 4030714899, eventId: 4123800071
63
userId: 4030714899, eventId: 2200516096
63
userId: 4030714899, eventId: 3443509362
63
userId: 4030714899, eventId: 371151062
63
userId: 4030714899, eventId: 2915789051
63
userId: 4030798150, eventId: 675888033
1152
userId: 4030798150, eventId: 3251813967
1152
userId: 4030798150, eventId: 4203627753
1152
userId: 4030798150, eventId: 799782433
1152
userId: 4030798150, eventId: 2428145712
1152
userId: 4030798150, eventId: 899234866
1152
userId: 4030798150, eventId: 3509100603
1152
userId: 4030798150, eventId: 823015621
1152
userId: 4030798150, eventId: 1501679119
1152
userId: 4030798150, eventId: 881346279
1152
userId: 4030798150, eventId: 1268088620
1152
userId: 4030798150, eventId: 3481603259
1152
userId: 4030798150, eventId: 4233837355
1152
userId: 4030798150, eventId: 2447943335
1152
userId: 4030798150, eventId: 573886273
1152
userId: 4030798150, eventId: 4125420656
1152
userId: 4030798150, eventId: 3315040094
1152
userId: 4032639394, eventId: 445416616
362
userId: 4032639394, eventId: 1079421917
362
userId: 4032639394, eventId: 2619521100
362
userId: 4032639394, eventId: 2559893836
362
userId: 4032639394, eventId: 1135473702
362
userId: 4032639394, eventId: 2861875204
362
userId: 4036343234, eventId: 1212947698
993
userId: 4036343234, eventId: 1133385189
993
userId: 4036343234, eventId: 1209963424
993
userId: 4036343234, eventId: 1637337509
993
userId: 4036343234, eventId: 944508163
993
userId: 4036343234, eventId: 3478765131
993
userId: 4040322582, eventId: 602394192
3059
userId: 4040322582, eventId: 1600413013
3059
userId: 4040322582, eventId: 75052451
3059
userId: 4040322582, eventId: 955398943
3059
userId: 4040322582, eventId: 1361307272
3059
userId: 4040322582, eventId: 2529072432
3059
userId: 4040322582, eventId: 771676713
3059
userId: 4042546595, eventId: 4262188500
2728
userId: 4042546595, eventId: 1060440359
2728
userId: 4042546595, eventId: 1642028556
2728
userId: 4042546595, eventId: 996485731
2728
userId: 4042546595, eventId: 4145665238
2728
userId: 4042546595, eventId: 940916476
2728
userId: 4042546595, eventId: 2494604370
2728
userId: 4042546595, eventId: 3039652825
2728
userId: 4042546595, eventId: 1379671569
2728
userId: 4042546595, eventId: 4050748396
2728
userId: 4042546595, eventId: 2322243932
2728
userId: 4042546595, eventId: 2416695503
2728
userId: 4042546595, eventId: 766559591
2728
userId: 4042546595, eventId: 3199154012
2728
userId: 4042546595, eventId: 3652898890
2728
userId: 4042546595, eventId: 1485857067
2728
userId: 4042546595, eventId: 3311128071
2728
userId: 4042546595, eventId: 1324942353
2728
userId: 4042546595, eventId: 2188669255
2728
userId: 4044282675, eventId: 1060275544
190
userId: 4044282675, eventId: 3462111166
190
userId: 4044282675, eventId: 2219144892
190
userId: 4044282675, eventId: 98978060
190
userId: 4044282675, eventId: 3119648674
190
userId: 4044282675, eventId: 2681780384
190
userId: 4044282675, eventId: 1058195960
190
userId: 4046490355, eventId: 1845469953
324
userId: 4046490355, eventId: 1174034
324
userId: 4046490355, eventId: 1200746292
324
userId: 4046490355, eventId: 3610133881
324
userId: 4046490355, eventId: 112957559
324
userId: 4046490355, eventId: 1830060678
324
userId: 4046490355, eventId: 723829948
324
userId: 4047903240, eventId: 1433428460
1708
userId: 4047903240, eventId: 3982673935
1708
userId: 4047903240, eventId: 2043006756
1708
userId: 4047903240, eventId: 1568276339
1708
userId: 4047903240, eventId: 2460275226
1708
userId: 4047903240, eventId: 2319080380
1708
userId: 4048868881, eventId: 2149464820
2605
userId: 4048868881, eventId: 614885637
2605
userId: 4048868881, eventId: 2498491194
2605
userId: 4048868881, eventId: 1844176380
2605
userId: 4048868881, eventId: 952519340
2605
userId: 4048868881, eventId: 268233790
2605
userId: 4048868881, eventId: 2007279414
2605
userId: 4052225912, eventId: 1370522761
1888
userId: 4052225912, eventId: 952519340
1888
userId: 4052225912, eventId: 4080944038
1888
userId: 4052225912, eventId: 2007279414
1888
userId: 4052225912, eventId: 1269035551
1888
userId: 4052225912, eventId: 3776957253
1888
userId: 4054029300, eventId: 1852872937
2138
userId: 4054029300, eventId: 2053952798
2138
userId: 4054029300, eventId: 622003251
2138
userId: 4054029300, eventId: 3120305017
2138
userId: 4054029300, eventId: 2153037761
2138
userId: 4054029300, eventId: 130493588
2138
userId: 4055395044, eventId: 2529072432
742
userId: 4055395044, eventId: 1532377761
742
userId: 4055395044, eventId: 955398943
742
userId: 4055395044, eventId: 3802870894
742
userId: 4055395044, eventId: 3314895954
742
userId: 4055395044, eventId: 1390707377
742
userId: 4057542584, eventId: 166297284
1568
userId: 4057542584, eventId: 2920504396
1568
userId: 4057542584, eventId: 718170464
1568
userId: 4057542584, eventId: 2433888237
1568
userId: 4057542584, eventId: 2926261497
1568
userId: 4057542584, eventId: 2890950285
1568
userId: 4057602883, eventId: 2114238114
1416
userId: 4057602883, eventId: 2874701225
1416
userId: 4057602883, eventId: 4049610607
1416
userId: 4057602883, eventId: 3823518713
1416
userId: 4057602883, eventId: 2944816123
1416
userId: 4057602883, eventId: 12241688
1416
userId: 4057602883, eventId: 2886354319
1416
userId: 4057602883, eventId: 3782727355
1416
userId: 4057602883, eventId: 175229279
1416
userId: 4057602883, eventId: 527886433
1416
userId: 4057602883, eventId: 947239682
1416
userId: 4057602883, eventId: 3987699038
1416
userId: 4057602883, eventId: 1326595643
1416
userId: 4057602883, eventId: 397526429
1416
userId: 4058274528, eventId: 642644408
740
userId: 4058274528, eventId: 3489853891
740
userId: 4058274528, eventId: 559618821
740
userId: 4058274528, eventId: 275986234
740
userId: 4058274528, eventId: 3929337192
740
userId: 4058274528, eventId: 4103733932
740
userId: 4062975904, eventId: 3438843767
455
userId: 4062975904, eventId: 4212324250
455
userId: 4062975904, eventId: 586190898
455
userId: 4062975904, eventId: 3258819416
455
userId: 4062975904, eventId: 960409301
455
userId: 4062975904, eventId: 3324533213
455
userId: 4066782471, eventId: 771676713
898
userId: 4066782471, eventId: 2130616732
898
userId: 4066782471, eventId: 1361307272
898
userId: 4066782471, eventId: 2643833505
898
userId: 4066782471, eventId: 2401458775
898
userId: 4066782471, eventId: 2977166421
898
userId: 4066782471, eventId: 955398943
898
userId: 4066782471, eventId: 4249304663
898
userId: 4067602271, eventId: 633659090
3135
userId: 4067602271, eventId: 278651783
3135
userId: 4067602271, eventId: 2130616732
3135
userId: 4067602271, eventId: 3868972599
3135
userId: 4067602271, eventId: 909891171
3135
userId: 4067602271, eventId: 907302600
3135
userId: 4067602271, eventId: 2643833505
3135
userId: 4070008434, eventId: 1600413013
2563
userId: 4070008434, eventId: 2401458775
2563
userId: 4070008434, eventId: 2977166421
2563
userId: 4070008434, eventId: 1431441098
2563
userId: 4070008434, eventId: 1332759137
2563
userId: 4070008434, eventId: 3685139016
2563
userId: 4073053389, eventId: 21987917
1442
userId: 4073053389, eventId: 2470509282
1442
userId: 4073053389, eventId: 2882404450
1442
userId: 4073053389, eventId: 4102873083
1442
userId: 4073053389, eventId: 2437776732
1442
userId: 4075466480, eventId: 3921014619
440
userId: 4075466480, eventId: 157268636
440
userId: 4075466480, eventId: 3327512314
440
userId: 4075466480, eventId: 2511965806
440
userId: 4075466480, eventId: 3335640477
440
userId: 4075466480, eventId: 3130827417
440
userId: 4075466480, eventId: 744858144
440
userId: 4075466480, eventId: 1275435478
440
userId: 4075466480, eventId: 230681934
440
userId: 4075466480, eventId: 1551227860
440
userId: 4075466480, eventId: 3367065897
440
userId: 4075466480, eventId: 1744265468
440
userId: 4075466480, eventId: 29800776
440
userId: 4075466480, eventId: 745009494
440
userId: 4075466480, eventId: 3261946380
440
userId: 4075466480, eventId: 3165653791
440
userId: 4075466480, eventId: 2747865716
440
userId: 4075466480, eventId: 2562744721
440
userId: 4075466480, eventId: 2974411380
440
userId: 4075466480, eventId: 2222499316
440
userId: 4075466480, eventId: 3403130296
440
userId: 4075466480, eventId: 3796480562
440
userId: 4075466480, eventId: 610221734
440
userId: 4075466480, eventId: 4271049883
440
userId: 4075466480, eventId: 3519205197
440
userId: 4075466480, eventId: 2505487381
440
userId: 4075466480, eventId: 43776105
440
userId: 4075466480, eventId: 2818648337
440
userId: 4075466480, eventId: 3166120310
440
userId: 4075466480, eventId: 963138294
440
userId: 4075466480, eventId: 2865784560
440
userId: 4075466480, eventId: 3538627205
440
userId: 4075466480, eventId: 1956857726
440
userId: 4075466480, eventId: 3889378792
440
userId: 4075466480, eventId: 2525317671
440
userId: 4075466480, eventId: 2227930190
440
userId: 4075466480, eventId: 1105000776
440
userId: 4075466480, eventId: 1125936115
440
userId: 4075466480, eventId: 980502560
440
userId: 4075466480, eventId: 3163699965
440
userId: 4075466480, eventId: 1318163270
440
userId: 4075466480, eventId: 3567240505
440
userId: 4075466480, eventId: 3463618172
440
userId: 4075466480, eventId: 2400649681
440
userId: 4075466480, eventId: 2589616173
440
userId: 4075574010, eventId: 4179630573
758
userId: 4075574010, eventId: 1682952247
758
userId: 4075574010, eventId: 659707179
758
userId: 4075574010, eventId: 2146865301
758
userId: 4075574010, eventId: 3722331766
758
userId: 4075574010, eventId: 1551986507
758
userId: 4075574010, eventId: 3839784127
758
userId: 4079159663, eventId: 955398943
2254
userId: 4079159663, eventId: 1277292991
2254
userId: 4079159663, eventId: 3502397803
2254
userId: 4079159663, eventId: 495087397
2254
userId: 4079159663, eventId: 2529072432
2254
userId: 4079159663, eventId: 2415873572
2254
userId: 4079159663, eventId: 4193610911
2254
userId: 4081761804, eventId: 1703662408
1356
userId: 4081761804, eventId: 691282771
1356
userId: 4081761804, eventId: 2274328264
1356
userId: 4081761804, eventId: 1146784351
1356
userId: 4081761804, eventId: 3702386514
1356
userId: 4081761804, eventId: 3480087256
1356
userId: 4081761804, eventId: 788716103
1356
userId: 4081761804, eventId: 2350143315
1356
userId: 4081761804, eventId: 2028042509
1356
userId: 4081761804, eventId: 3875198199
1356
userId: 4081921627, eventId: 1991348663
1569
userId: 4081921627, eventId: 2804196261
1569
userId: 4081921627, eventId: 3335267094
1569
userId: 4081921627, eventId: 1107859556
1569
userId: 4081921627, eventId: 456154992
1569
userId: 4081921627, eventId: 2028133922
1569
userId: 4081921627, eventId: 3730987913
1569
userId: 4081921627, eventId: 1650425619
1569
userId: 4087630383, eventId: 2433217376
1817
userId: 4087630383, eventId: 3045233736
1817
userId: 4087630383, eventId: 3790866767
1817
userId: 4087630383, eventId: 2140038223
1817
userId: 4087630383, eventId: 2899756668
1817
userId: 4087630383, eventId: 4097011060
1817
userId: 4089111119, eventId: 3479440123
2483
userId: 4089111119, eventId: 2575170797
2483
userId: 4089111119, eventId: 3569739978
2483
userId: 4089111119, eventId: 2368911433
2483
userId: 4089111119, eventId: 2769506511
2483
userId: 4089111119, eventId: 1455321313
2483
userId: 4098096768, eventId: 2899306830
437
userId: 4098096768, eventId: 3895404984
437
userId: 4098096768, eventId: 3150441220
437
userId: 4098096768, eventId: 4253930794
437
userId: 4098096768, eventId: 2437630462
437
userId: 4098096768, eventId: 1159109322
437
userId: 4101515763, eventId: 2554184750
3265
userId: 4101515763, eventId: 2615984474
3265
userId: 4101515763, eventId: 3608297024
3265
userId: 4101515763, eventId: 3655295959
3265
userId: 4101515763, eventId: 2770527444
3265
userId: 4101515763, eventId: 2090707728
3265
userId: 4101519751, eventId: 427097190
1271
userId: 4101519751, eventId: 2114066448
1271
userId: 4101519751, eventId: 688225431
1271
userId: 4101519751, eventId: 2803416473
1271
userId: 4101519751, eventId: 3801433102
1271
userId: 4101519751, eventId: 893326926
1271
userId: 4101519751, eventId: 4258442948
1271
userId: 4101519751, eventId: 1347542349
1271
userId: 4101519751, eventId: 4140663220
1271
userId: 4101519751, eventId: 897667289
1271
userId: 4101519751, eventId: 615488222
1271
userId: 4101519751, eventId: 3828664529
1271
userId: 4101519751, eventId: 862976415
1271
userId: 4103253513, eventId: 3984042837
323
userId: 4103253513, eventId: 1597380017
323
userId: 4103253513, eventId: 966971643
323
userId: 4103253513, eventId: 152418051
323
userId: 4103253513, eventId: 2428145712
323
userId: 4103253513, eventId: 3251813967
323
userId: 4103923906, eventId: 1536783222
1325
userId: 4103923906, eventId: 737023160
1325
userId: 4103923906, eventId: 1600413013
1325
userId: 4103923906, eventId: 955398943
1325
userId: 4103923906, eventId: 997119679
1325
userId: 4103923906, eventId: 3981414613
1325
userId: 4106525792, eventId: 3651525181
1509
userId: 4106525792, eventId: 2324549960
1509
userId: 4106525792, eventId: 4000251470
1509
userId: 4106525792, eventId: 3643004825
1509
userId: 4106525792, eventId: 2120779072
1509
userId: 4106525792, eventId: 3592100929
1509
userId: 4106525792, eventId: 1473256460
1509
userId: 4106927042, eventId: 1327611267
347
userId: 4106927042, eventId: 3154564127
347
userId: 4106927042, eventId: 1876364254
347
userId: 4106927042, eventId: 44093924
347
userId: 4106927042, eventId: 3588547708
347
userId: 4106927042, eventId: 750863544
347
userId: 4107349498, eventId: 3795400528
1107
userId: 4107349498, eventId: 2218325768
1107
userId: 4107349498, eventId: 3842730088
1107
userId: 4107349498, eventId: 2604545919
1107
userId: 4107349498, eventId: 543972501
1107
userId: 4107349498, eventId: 715515458
1107
userId: 4107349498, eventId: 1228413502
1107
userId: 4108811510, eventId: 952519340
2028
userId: 4108811510, eventId: 2149464820
2028
userId: 4108811510, eventId: 1203717384
2028
userId: 4108811510, eventId: 1844176380
2028
userId: 4108811510, eventId: 2007279414
2028
userId: 4108811510, eventId: 1269035551
2028
userId: 4108811510, eventId: 1076364848
2028
userId: 4109397627, eventId: 2942609119
3236
userId: 4109397627, eventId: 2131811948
3236
userId: 4109397627, eventId: 1255629030
3236
userId: 4109397627, eventId: 1065552764
3236
userId: 4109397627, eventId: 3738103740
3236
userId: 4109397627, eventId: 3554433899
3236
userId: 4109397627, eventId: 3841242017
3236
userId: 4111854243, eventId: 2201545594
1132
userId: 4111854243, eventId: 3596510482
1132
userId: 4111854243, eventId: 6996239
1132
userId: 4111854243, eventId: 3311509108
1132
userId: 4111854243, eventId: 2000201086
1132
userId: 4111854243, eventId: 4146680584
1132
userId: 4115365036, eventId: 525624264
1822
userId: 4115365036, eventId: 955398943
1822
userId: 4115365036, eventId: 1361307272
1822
userId: 4115365036, eventId: 97217712
1822
userId: 4115365036, eventId: 633659090
1822
userId: 4115365036, eventId: 907302600
1822
userId: 4115365036, eventId: 2643833505
1822
userId: 4115365036, eventId: 2529072432
1822
userId: 4115365036, eventId: 771676713
1822
userId: 4115365036, eventId: 2130616732
1822
userId: 4118821425, eventId: 196335814
1130
userId: 4118821425, eventId: 780696608
1130
userId: 4118821425, eventId: 3681999765
1130
userId: 4118821425, eventId: 2806565970
1130
userId: 4118821425, eventId: 4198728308
1130
userId: 4118821425, eventId: 559618821
1130
userId: 4118821425, eventId: 3643004825
1130
userId: 4119250454, eventId: 1133385189
812
userId: 4119250454, eventId: 501560870
812
userId: 4119250454, eventId: 2572673665
812
userId: 4119250454, eventId: 3814766855
812
userId: 4119250454, eventId: 553840202
812
userId: 4119250454, eventId: 196335814
812
userId: 4120847672, eventId: 321681951
1894
userId: 4120847672, eventId: 834360181
1894
userId: 4120847672, eventId: 2427264930
1894
userId: 4120847672, eventId: 4364520
1894
userId: 4120847672, eventId: 613582690
1894
userId: 4120847672, eventId: 321116395
1894
userId: 4122019703, eventId: 2038842201
760
userId: 4122019703, eventId: 893373776
760
userId: 4122019703, eventId: 3676617790
760
userId: 4122019703, eventId: 3523716576
760
userId: 4122019703, eventId: 2501314150
760
userId: 4122019703, eventId: 36941495
760
userId: 4122483286, eventId: 2892429018
2750
userId: 4122483286, eventId: 193057331
2750
userId: 4122483286, eventId: 2792119811
2750
userId: 4122483286, eventId: 1270821753
2750
userId: 4122483286, eventId: 4159151915
2750
userId: 4122483286, eventId: 4100467276
2750
userId: 4122483286, eventId: 3784929022
2750
userId: 4122483286, eventId: 1940144951
2750
userId: 4122483286, eventId: 1174322982
2750
userId: 4122483286, eventId: 3803531290
2750
userId: 4122483286, eventId: 3729527390
2750
userId: 4122483286, eventId: 1643733273
2750
userId: 4122483286, eventId: 1363299595
2750
userId: 4122483286, eventId: 580944656
2750
userId: 4122483286, eventId: 158205194
2750
userId: 4123476974, eventId: 2073609284
234
userId: 4123476974, eventId: 2149464820
234
userId: 4123476974, eventId: 673098017
234
userId: 4123476974, eventId: 1269035551
234
userId: 4123476974, eventId: 2007279414
234
userId: 4123476974, eventId: 1203717384
234
userId: 4124005270, eventId: 1532377761
1530
userId: 4124005270, eventId: 955398943
1530
userId: 4124005270, eventId: 1390707377
1530
userId: 4124005270, eventId: 3632072502
1530
userId: 4124005270, eventId: 2051111588
1530
userId: 4124005270, eventId: 2529072432
1530
userId: 4125376571, eventId: 3929507420
139
userId: 4125376571, eventId: 1205670273
139
userId: 4125376571, eventId: 1731351853
139
userId: 4125376571, eventId: 1935724864
139
userId: 4125376571, eventId: 1710224312
139
userId: 4125376571, eventId: 230117918
139
userId: 4129856023, eventId: 1028330395
1812
userId: 4129856023, eventId: 3677230481
1812
userId: 4129856023, eventId: 3781269679
1812
userId: 4129856023, eventId: 1243182652
1812
userId: 4129856023, eventId: 2772019284
1812
userId: 4129856023, eventId: 139221822
1812
userId: 4133514703, eventId: 719337372
1541
userId: 4133514703, eventId: 1558625743
1541
userId: 4133514703, eventId: 2468336372
1541
userId: 4133514703, eventId: 827682864
1541
userId: 4134124728, eventId: 3327194350
1755
userId: 4134124728, eventId: 3938234624
1755
userId: 4134124728, eventId: 1599651156
1755
userId: 4134124728, eventId: 1520803271
1755
userId: 4134124728, eventId: 545994124
1755
userId: 4134124728, eventId: 3127514099
1755
userId: 4135589149, eventId: 1764893644
817
userId: 4135589149, eventId: 3536426515
817
userId: 4135589149, eventId: 2579225663
817
userId: 4135589149, eventId: 1063306856
817
userId: 4135589149, eventId: 3130359578
817
userId: 4135589149, eventId: 1685082900
817
userId: 4135593225, eventId: 84432624
2828
userId: 4135593225, eventId: 2997075790
2828
userId: 4135593225, eventId: 508297104
2828
userId: 4135593225, eventId: 784664260
2828
userId: 4135593225, eventId: 2824096896
2828
userId: 4135593225, eventId: 1347202114
2828
userId: 4136285322, eventId: 4125420656
2670
userId: 4136285322, eventId: 3315040094
2670
userId: 4136285322, eventId: 2428145712
2670
userId: 4136285322, eventId: 899234866
2670
userId: 4136285322, eventId: 675888033
2670
userId: 4136285322, eventId: 4203627753
2670
userId: 4136285322, eventId: 3509100603
2670
userId: 4136285322, eventId: 823015621
2670
userId: 4136285322, eventId: 2428145712
2670
userId: 4136285322, eventId: 3984042837
2670
userId: 4136285322, eventId: 675888033
2670
userId: 4136285322, eventId: 4203627753
2670
userId: 4137863751, eventId: 3345225671
2533
userId: 4137863751, eventId: 4201550847
2533
userId: 4137863751, eventId: 1818408219
2533
userId: 4137863751, eventId: 3414181314
2533
userId: 4137863751, eventId: 1080582769
2533
userId: 4137863751, eventId: 3974066619
2533
userId: 4137863751, eventId: 83332510
2533
userId: 4138013784, eventId: 1205670273
955
userId: 4138013784, eventId: 3681892474
955
userId: 4138013784, eventId: 282271212
955
userId: 4138013784, eventId: 1464766301
955
userId: 4138013784, eventId: 736236994
955
userId: 4138013784, eventId: 3929507420
955
userId: 4138013784, eventId: 3183669415
955
userId: 4138499822, eventId: 1926591654
986
userId: 4138499822, eventId: 2506434794
986
userId: 4138499822, eventId: 2731345509
986
userId: 4138499822, eventId: 263876510
986
userId: 4138499822, eventId: 2287617625
986
userId: 4138499822, eventId: 3776181536
986
userId: 4140744216, eventId: 1838041662
1082
userId: 4140744216, eventId: 2572117226
1082
userId: 4140744216, eventId: 1659742236
1082
userId: 4140744216, eventId: 2349777229
1082
userId: 4140744216, eventId: 2520498690
1082
userId: 4140744216, eventId: 4183544021
1082
userId: 4141359923, eventId: 986152191
3124
userId: 4141359923, eventId: 2803195749
3124
userId: 4141359923, eventId: 2806565970
3124
userId: 4141359923, eventId: 3116040201
3124
userId: 4141359923, eventId: 3643004825
3124
userId: 4141359923, eventId: 3793452317
3124
userId: 4141924620, eventId: 2153037761
2288
userId: 4141924620, eventId: 731731924
2288
userId: 4141924620, eventId: 2250918448
2288
userId: 4141924620, eventId: 4364520
2288
userId: 4141924620, eventId: 3247053834
2288
userId: 4141924620, eventId: 641950279
2288
userId: 4141924620, eventId: 2465528861
2288
userId: 4141924620, eventId: 2115491671
2288
userId: 4141924620, eventId: 2038842201
2288
userId: 4145252615, eventId: 3167570493
2283
userId: 4145252615, eventId: 896838988
2283
userId: 4145252615, eventId: 67648066
2283
userId: 4145252615, eventId: 1386351230
2283
userId: 4145252615, eventId: 3005548418
2283
userId: 4145252615, eventId: 1811608751
2283
userId: 4146086354, eventId: 280784670
483
userId: 4146086354, eventId: 715813761
483
userId: 4146086354, eventId: 2247298290
483
userId: 4146086354, eventId: 318809922
483
userId: 4146086354, eventId: 1560792011
483
userId: 4146086354, eventId: 3260635116
483
userId: 4146675310, eventId: 268233790
1592
userId: 4146675310, eventId: 1902753965
1592
userId: 4146675310, eventId: 3849306291
1592
userId: 4146675310, eventId: 2149464820
1592
userId: 4146675310, eventId: 1269035551
1592
userId: 4146675310, eventId: 2007279414
1592
userId: 4151484001, eventId: 3601943023
593
userId: 4151484001, eventId: 4147483412
593
userId: 4151484001, eventId: 210393825
593
userId: 4151484001, eventId: 4064214056
593
userId: 4151484001, eventId: 2513953842
593
userId: 4151484001, eventId: 1461387354
593
userId: 4152805025, eventId: 3507974117
2067
userId: 4152805025, eventId: 2808951120
2067
userId: 4152805025, eventId: 3515520150
2067
userId: 4152805025, eventId: 2061870345
2067
userId: 4152805025, eventId: 2071807179
2067
userId: 4152805025, eventId: 2843648870
2067
userId: 4156731925, eventId: 2157645470
2960
userId: 4156731925, eventId: 2415873572
2960
userId: 4156731925, eventId: 896333395
2960
userId: 4156731925, eventId: 3429508261
2960
userId: 4156731925, eventId: 955398943
2960
userId: 4156731925, eventId: 1139465813
2960
userId: 4156731925, eventId: 711611185
2960
userId: 4156731925, eventId: 2610494844
2960
userId: 4156731925, eventId: 2529072432
2960
userId: 4156731925, eventId: 2830173169
2960
userId: 4156731925, eventId: 800349173
2960
userId: 4156731925, eventId: 1497764698
2960
userId: 4157365314, eventId: 2270126516
132
userId: 4157365314, eventId: 85610883
132
userId: 4157365314, eventId: 2145977549
132
userId: 4157365314, eventId: 4159897186
132
userId: 4157365314, eventId: 4267083677
132
userId: 4157365314, eventId: 3418415418
132
userId: 4157365314, eventId: 3703612480
132
userId: 4157365314, eventId: 1693226702
132
userId: 4157365314, eventId: 3578484232
132
userId: 4157365314, eventId: 1255629030
132
userId: 4157365314, eventId: 1446608996
132
userId: 4157365314, eventId: 126225732
132
userId: 4157365314, eventId: 372011842
132
userId: 4157365314, eventId: 3210395746
132
userId: 4157365314, eventId: 3183605169
132
userId: 4162525077, eventId: 2129718710
789
userId: 4162525077, eventId: 263011441
789
userId: 4162525077, eventId: 4157119717
789
userId: 4162525077, eventId: 3205877648
789
userId: 4162525077, eventId: 945869322
789
userId: 4162525077, eventId: 3861768249
789
userId: 4162525077, eventId: 2416778852
789
userId: 4162769577, eventId: 2528133963
989
userId: 4162769577, eventId: 2445964998
989
userId: 4162769577, eventId: 2396566946
989
userId: 4162769577, eventId: 1465929077
989
userId: 4162769577, eventId: 1716470668
989
userId: 4162769577, eventId: 810618772
989
userId: 4164388326, eventId: 2437756221
1276
userId: 4164388326, eventId: 741936389
1276
userId: 4164388326, eventId: 3175320123
1276
userId: 4164388326, eventId: 3450438709
1276
userId: 4164388326, eventId: 3971391468
1276
userId: 4164388326, eventId: 2694358997
1276
userId: 4164388326, eventId: 116707400
1276
userId: 4165482530, eventId: 1148012652
1705
userId: 4165482530, eventId: 1600413013
1705
userId: 4165482530, eventId: 955398943
1705
userId: 4165482530, eventId: 2130616732
1705
userId: 4165482530, eventId: 2133183406
1705
userId: 4165482530, eventId: 1334001859
1705
userId: 4168402703, eventId: 210393825
2316
userId: 4168402703, eventId: 4147483412
2316
userId: 4168402703, eventId: 1985153611
2316
userId: 4168402703, eventId: 309860528
2316
userId: 4168402703, eventId: 760705045
2316
userId: 4168402703, eventId: 3601943023
2316
userId: 4168402703, eventId: 256821264
2316
userId: 4168402703, eventId: 1461387354
2316
userId: 4170157131, eventId: 2823343043
670
userId: 4170157131, eventId: 4247560499
670
userId: 4170157131, eventId: 1190152428
670
userId: 4170157131, eventId: 2191690926
670
userId: 4170453600, eventId: 2463159061
918
userId: 4170453600, eventId: 1690154685
918
userId: 4170453600, eventId: 3071822251
918
userId: 4170453600, eventId: 511362023
918
userId: 4170453600, eventId: 1954528574
918
userId: 4170453600, eventId: 4013950788
918
userId: 4170453600, eventId: 3898095594
918
userId: 4170453600, eventId: 84684334
918
userId: 4170453600, eventId: 1406383414
918
userId: 4170453600, eventId: 299696797
918
userId: 4170453600, eventId: 580504008
918
userId: 4171765566, eventId: 4106186736
2436
userId: 4171765566, eventId: 1532377761
2436
userId: 4171765566, eventId: 2373204206
2436
userId: 4171765566, eventId: 3300948291
2436
userId: 4171765566, eventId: 2529072432
2436
userId: 4171765566, eventId: 955398943
2436
userId: 4175659797, eventId: 1444583217
1204
userId: 4175659797, eventId: 803596418
1204
userId: 4175659797, eventId: 2234592975
1204
userId: 4175659797, eventId: 1243481310
1204
userId: 4175659797, eventId: 2237302185
1204
userId: 4175659797, eventId: 872052061
1204
userId: 4175659797, eventId: 3946692042
1204
userId: 4175659797, eventId: 167252762
1204
userId: 4175659797, eventId: 509781557
1204
userId: 4175659797, eventId: 3390105219
1204
userId: 4175659797, eventId: 1147733770
1204
userId: 4176403253, eventId: 3051804335
59
userId: 4176403253, eventId: 232148793
59
userId: 4176403253, eventId: 287790200
59
userId: 4176403253, eventId: 1180987071
59
userId: 4178291537, eventId: 332179237
150
userId: 4178291537, eventId: 28242790
150
userId: 4178291537, eventId: 2468957580
150
userId: 4178291537, eventId: 1275755916
150
userId: 4178291537, eventId: 3613324598
150
userId: 4178291537, eventId: 4222144697
150
userId: 4178291537, eventId: 633242631
150
userId: 4178291537, eventId: 1487659279
150
userId: 4179324570, eventId: 780696608
1911
userId: 4179324570, eventId: 1111438174
1911
userId: 4179324570, eventId: 1826785122
1911
userId: 4179324570, eventId: 2059512399
1911
userId: 4179324570, eventId: 1241270051
1911
userId: 4179324570, eventId: 1448086840
1911
userId: 4180930546, eventId: 299139894
1098
userId: 4180930546, eventId: 3323980704
1098
userId: 4180930546, eventId: 2409076523
1098
userId: 4180930546, eventId: 1922719636
1098
userId: 4181452333, eventId: 4156355007
977
userId: 4181452333, eventId: 1083268255
977
userId: 4181452333, eventId: 1367385701
977
userId: 4181452333, eventId: 3331390995
977
userId: 4181468602, eventId: 2015759069
2089
userId: 4181468602, eventId: 3841472085
2089
userId: 4181468602, eventId: 3501220630
2089
userId: 4181468602, eventId: 675888033
2089
userId: 4181468602, eventId: 711902059
2089
userId: 4181468602, eventId: 13857128
2089
userId: 4181468602, eventId: 760085504
2089
userId: 4181543522, eventId: 2007279414
1910
userId: 4181543522, eventId: 3231756036
1910
userId: 4181543522, eventId: 1269035551
1910
userId: 4181543522, eventId: 2345395514
1910
userId: 4181543522, eventId: 1076364848
1910
userId: 4185115186, eventId: 673098017
1016
userId: 4185115186, eventId: 1076364848
1016
userId: 4185115186, eventId: 2007279414
1016
userId: 4185115186, eventId: 952519340
1016
userId: 4185115186, eventId: 1269035551
1016
userId: 4185115186, eventId: 2149464820
1016
userId: 4185425091, eventId: 3036332464
412
userId: 4185425091, eventId: 2814227130
412
userId: 4185425091, eventId: 1914806770
412
userId: 4185425091, eventId: 824593257
412
userId: 4185425091, eventId: 3089507532
412
userId: 4185425091, eventId: 3169321620
412
userId: 4186528243, eventId: 2007279414
1242
userId: 4186528243, eventId: 1269035551
1242
userId: 4186528243, eventId: 952519340
1242
userId: 4186528243, eventId: 1076364848
1242
userId: 4186528243, eventId: 1816813281
1242
userId: 4186528243, eventId: 3554778591
1242
userId: 4188511767, eventId: 2007279414
2640
userId: 4188511767, eventId: 1269035551
2640
userId: 4188511767, eventId: 1203717384
2640
userId: 4188511767, eventId: 2149464820
2640
userId: 4188511767, eventId: 4080944038
2640
userId: 4188511767, eventId: 1076364848
2640
userId: 4190165036, eventId: 1044854627
3008
userId: 4190165036, eventId: 719337372
3008
userId: 4190165036, eventId: 3632072502
3008
userId: 4190165036, eventId: 2529072432
3008
userId: 4190165036, eventId: 955398943
3008
userId: 4190165036, eventId: 1600413013
3008
userId: 4190165036, eventId: 1532377761
3008
userId: 4190165036, eventId: 1390707377
3008
userId: 4190879012, eventId: 2154137211
1282
userId: 4190879012, eventId: 2078281088
1282
userId: 4190879012, eventId: 516999313
1282
userId: 4190879012, eventId: 3051234166
1282
userId: 4190879012, eventId: 1134801869
1282
userId: 4190879012, eventId: 2164283591
1282
userId: 4192733318, eventId: 606749223
938
userId: 4192733318, eventId: 3081875998
938
userId: 4192733318, eventId: 2954869825
938
userId: 4192733318, eventId: 519339673
938
userId: 4192733318, eventId: 3755008121
938
userId: 4192733318, eventId: 2530774373
938
userId: 4192733318, eventId: 4145779864
938
userId: 4192733318, eventId: 2968986224
938
userId: 4195660981, eventId: 221202458
1115
userId: 4195660981, eventId: 3217855831
1115
userId: 4195660981, eventId: 4160048540
1115
userId: 4195660981, eventId: 897667289
1115
userId: 4195660981, eventId: 3130403537
1115
userId: 4195660981, eventId: 1577755528
1115
userId: 4195660981, eventId: 3720820779
1115
userId: 4195660981, eventId: 238236954
1115
userId: 4195660981, eventId: 3008735981
1115
userId: 4195660981, eventId: 2963144429
1115
userId: 4196666928, eventId: 810618772
432
userId: 4196666928, eventId: 1465929077
432
userId: 4196666928, eventId: 3992718328
432
userId: 4196666928, eventId: 1269035551
432
userId: 4196666928, eventId: 1076364848
432
userId: 4197193550, eventId: 566288779
1991
userId: 4197193550, eventId: 3180156897
1991
userId: 4197193550, eventId: 2307691682
1991
userId: 4197193550, eventId: 1638915826
1991
userId: 4197193550, eventId: 1628057176
1991
userId: 4197193550, eventId: 2582345152
1991
userId: 4198845543, eventId: 1991938600
2227
userId: 4198845543, eventId: 370008848
2227
userId: 4198845543, eventId: 2115491671
2227
userId: 4198845543, eventId: 2150848115
2227
userId: 4198845543, eventId: 3365249126
2227
userId: 4199616576, eventId: 797638314
1912
userId: 4199616576, eventId: 2953981660
1912
userId: 4199616576, eventId: 2714876429
1912
userId: 4199616576, eventId: 400356575
1912
userId: 4199616576, eventId: 3164534147
1912
userId: 4199616576, eventId: 602394192
1912
userId: 4199616576, eventId: 821614261
1912
userId: 4199616576, eventId: 1487327799
1912
userId: 4199616576, eventId: 3310353908
1912
userId: 4199616576, eventId: 955398943
1912
userId: 4199616576, eventId: 2481417302
1912
userId: 4199616576, eventId: 270532321
1912
userId: 4199616576, eventId: 2420150606
1912
userId: 4199616576, eventId: 1826343214
1912
userId: 4199616576, eventId: 82886770
1912
userId: 4199616576, eventId: 2529072432
1912
userId: 4199616576, eventId: 2645454646
1912
userId: 4199616576, eventId: 1908625006
1912
userId: 4199616576, eventId: 1290210464
1912
userId: 4199616576, eventId: 3276213471
1912
userId: 4199616576, eventId: 1294433853
1912
userId: 4200601044, eventId: 3118191184
1439
userId: 4200601044, eventId: 2237560658
1439
userId: 4200601044, eventId: 2784556347
1439
userId: 4200601044, eventId: 443617544
1439
userId: 4200601044, eventId: 4153011100
1439
userId: 4200601044, eventId: 2030880654
1439
userId: 4201750807, eventId: 2115491671
1230
userId: 4201750807, eventId: 1189005464
1230
userId: 4201750807, eventId: 3864843980
1230
userId: 4201750807, eventId: 3790866767
1230
userId: 4201750807, eventId: 1127345478
1230
userId: 4201750807, eventId: 1630022509
1230
userId: 4202081674, eventId: 539032065
3136
userId: 4202081674, eventId: 3655295959
3136
userId: 4202081674, eventId: 2099424186
3136
userId: 4202081674, eventId: 2529072432
3136
userId: 4202081674, eventId: 955398943
3136
userId: 4202081674, eventId: 861118590
3136
userId: 4202112938, eventId: 3094012945
1319
userId: 4202112938, eventId: 2114371180
1319
userId: 4202112938, eventId: 3585531671
1319
userId: 4202112938, eventId: 2198800626
1319
userId: 4202112938, eventId: 753115138
1319
userId: 4202112938, eventId: 238236954
1319
userId: 4205646791, eventId: 898889852
386
userId: 4205646791, eventId: 3753704467
386
userId: 4205646791, eventId: 915403718
386
userId: 4205646791, eventId: 2748209109
386
userId: 4205646791, eventId: 2286155514
386
userId: 4205646791, eventId: 3807386691
386
userId: 4205646791, eventId: 2725164213
386
userId: 4205646791, eventId: 2219144892
386
userId: 4205646791, eventId: 3928440935
386
userId: 4206209185, eventId: 3103100779
2581
userId: 4206209185, eventId: 2007279414
2581
userId: 4206209185, eventId: 1269035551
2581
userId: 4206209185, eventId: 1902753965
2581
userId: 4206209185, eventId: 1203717384
2581
userId: 4206209185, eventId: 2149464820
2581
userId: 4206209185, eventId: 2498491194
2581
userId: 4206471336, eventId: 2007279414
808
userId: 4206471336, eventId: 516796945
808
userId: 4206471336, eventId: 2149464820
808
userId: 4206471336, eventId: 268233790
808
userId: 4206471336, eventId: 1203717384
808
userId: 4206471336, eventId: 1269035551
808
userId: 4206915288, eventId: 340072523
901
userId: 4206915288, eventId: 4191185830
901
userId: 4206915288, eventId: 784441822
901
userId: 4206915288, eventId: 60934942
901
userId: 4206915288, eventId: 811652961
901
userId: 4206915288, eventId: 3704776276
901
userId: 4206915288, eventId: 4157683270
901
userId: 4207448575, eventId: 1908283633
1863
userId: 4207448575, eventId: 4237843812
1863
userId: 4207448575, eventId: 3149161588
1863
userId: 4207448575, eventId: 3913730998
1863
userId: 4207448575, eventId: 3577474244
1863
userId: 4207448575, eventId: 1753644287
1863
userId: 4213772349, eventId: 1280009430
2900
userId: 4213772349, eventId: 2034851926
2900
userId: 4213772349, eventId: 4238714895
2900
userId: 4213772349, eventId: 2558272675
2900
userId: 4213772349, eventId: 1689479893
2900
userId: 4213772349, eventId: 877168999
2900
userId: 4214369322, eventId: 776090102
2407
userId: 4214369322, eventId: 4105603749
2407
userId: 4214369322, eventId: 134992377
2407
userId: 4214369322, eventId: 3462834913
2407
userId: 4214369322, eventId: 1871361487
2407
userId: 4214369322, eventId: 2986124911
2407
userId: 4214369322, eventId: 1384103878
2407
userId: 4217222631, eventId: 4130722320
2671
userId: 4217222631, eventId: 2328083431
2671
userId: 4217222631, eventId: 4198564536
2671
userId: 4217222631, eventId: 3012990777
2671
userId: 4217222631, eventId: 3273695084
2671
userId: 4217222631, eventId: 1120274880
2671
userId: 4217222631, eventId: 1433072169
2671
userId: 4217222631, eventId: 2529072432
2671
userId: 4217222631, eventId: 3241272469
2671
userId: 4217222631, eventId: 844053363
2671
userId: 4217222631, eventId: 1673895160
2671
userId: 4217222631, eventId: 613942852
2671
userId: 4217222631, eventId: 317863256
2671
userId: 4217222631, eventId: 3404987729
2671
userId: 4217222631, eventId: 1319656469
2671
userId: 4217222631, eventId: 728874447
2671
userId: 4217222631, eventId: 2762536315
2671
userId: 4217222631, eventId: 3573758696
2671
userId: 4217222631, eventId: 1854406812
2671
userId: 4217222631, eventId: 468922992
2671
userId: 4217222631, eventId: 2860418664
2671
userId: 4217222631, eventId: 955398943
2671
userId: 4219701031, eventId: 862271714
1029
userId: 4219701031, eventId: 3245840256
1029
userId: 4219701031, eventId: 2750965517
1029
userId: 4219701031, eventId: 3480624055
1029
userId: 4220962429, eventId: 2178152313
2906
userId: 4220962429, eventId: 1951884947
2906
userId: 4220962429, eventId: 29180020
2906
userId: 4220962429, eventId: 1950128895
2906
userId: 4220962429, eventId: 1124649470
2906
userId: 4220962429, eventId: 1247327810
2906
userId: 4220962429, eventId: 63434504
2906
userId: 4220962429, eventId: 4239416496
2906
userId: 4220962429, eventId: 1611840162
2906
userId: 4220962429, eventId: 3926022702
2906
userId: 4222590338, eventId: 1782916605
2449
userId: 4222590338, eventId: 2434399746
2449
userId: 4222590338, eventId: 1224903972
2449
userId: 4222590338, eventId: 1986416649
2449
userId: 4222590338, eventId: 300004583
2449
userId: 4222590338, eventId: 2153821115
2449
userId: 4222590338, eventId: 976859786
2449
userId: 4222590338, eventId: 1380816019
2449
userId: 4222590338, eventId: 1615092494
2449
userId: 4222590338, eventId: 2490438703
2449
userId: 4222590338, eventId: 2406637710
2449
userId: 4222590338, eventId: 1763016232
2449
userId: 4226575687, eventId: 645163767
807
userId: 4226575687, eventId: 186104502
807
userId: 4226575687, eventId: 914532885
807
userId: 4226575687, eventId: 719337372
807
userId: 4226575687, eventId: 3434410911
807
userId: 4226575687, eventId: 1517488130
807
userId: 4226575687, eventId: 814437417
807
userId: 4226575687, eventId: 1390707377
807
userId: 4226575687, eventId: 2529072432
807
userId: 4232243965, eventId: 3968395368
2018
userId: 4232243965, eventId: 1241270051
2018
userId: 4232243965, eventId: 2520824112
2018
userId: 4232243965, eventId: 1330949688
2018
userId: 4232243965, eventId: 1036961928
2018
userId: 4232243965, eventId: 532053807
2018
userId: 4232243965, eventId: 2803195749
2018
userId: 4232243965, eventId: 1036837546
2018
userId: 4233914020, eventId: 3920148761
1573
userId: 4233914020, eventId: 1508951125
1573
userId: 4233914020, eventId: 251609489
1573
userId: 4233914020, eventId: 1740772631
1573
userId: 4233914020, eventId: 4103873674
1573
userId: 4233914020, eventId: 345541072
1573
userId: 4235386848, eventId: 1775336793
3081
userId: 4235386848, eventId: 1173051362
3081
userId: 4235386848, eventId: 69137172
3081
userId: 4235386848, eventId: 1908645599
3081
userId: 4235386848, eventId: 127371840
3081
userId: 4235386848, eventId: 1160297188
3081
userId: 4236087068, eventId: 2204867403
971
userId: 4236087068, eventId: 1896310801
971
userId: 4236087068, eventId: 2805037878
971
userId: 4236087068, eventId: 2980258101
971
userId: 4236087068, eventId: 104397174
971
userId: 4238321438, eventId: 2664832740
493
userId: 4238321438, eventId: 621292958
493
userId: 4238321438, eventId: 3786694913
493
userId: 4238321438, eventId: 520433121
493
userId: 4238321438, eventId: 1057214819
493
userId: 4238321438, eventId: 2269336012
493
userId: 4239378941, eventId: 215333035
1322
userId: 4239378941, eventId: 2490299454
1322
userId: 4239378941, eventId: 3338163812
1322
userId: 4239378941, eventId: 1807632609
1322
userId: 4239378941, eventId: 2896657224
1322
userId: 4239378941, eventId: 3007295768
1322
userId: 4239616087, eventId: 1395960049
3345
userId: 4239616087, eventId: 1425177328
3345
userId: 4239616087, eventId: 1753827631
3345
userId: 4239616087, eventId: 53110486
3345
userId: 4239616087, eventId: 125548712
3345
userId: 4239616087, eventId: 2659423239
3345
userId: 4239616087, eventId: 2037550810
3345
userId: 4239920443, eventId: 4219244481
2868
userId: 4239920443, eventId: 2853909310
2868
userId: 4239920443, eventId: 307263394
2868
userId: 4239920443, eventId: 3075707957
2868
userId: 4239920443, eventId: 2780111738
2868
userId: 4239920443, eventId: 1305006038
2868
userId: 4239920443, eventId: 1550707711
2868
userId: 4244109605, eventId: 2430405430
1695
userId: 4244109605, eventId: 3852416626
1695
userId: 4244109605, eventId: 1738149624
1695
userId: 4244109605, eventId: 1236072035
1695
userId: 4244109605, eventId: 1049842818
1695
userId: 4244109605, eventId: 3188133088
1695
userId: 4244109605, eventId: 2370228216
1695
userId: 4244109605, eventId: 1428713275
1695
userId: 4244109605, eventId: 3002800200
1695
userId: 4244109605, eventId: 3863898170
1695
userId: 4244109605, eventId: 852324847
1695
userId: 4244109605, eventId: 2171536546
1695
userId: 4244109605, eventId: 1024681142
1695
userId: 4244109605, eventId: 3825878532
1695
userId: 4244109605, eventId: 2230413417
1695
userId: 4244109605, eventId: 2475891235
1695
userId: 4244109605, eventId: 510692114
1695
userId: 4244109605, eventId: 422504591
1695
userId: 4244109605, eventId: 684180084
1695
userId: 4244109605, eventId: 421512847
1695
userId: 4244109605, eventId: 2288730210
1695
userId: 4244109605, eventId: 3007406784
1695
userId: 4244109605, eventId: 3004061810
1695
userId: 4244109605, eventId: 124610391
1695
userId: 4244109605, eventId: 3577726402
1695
userId: 4244109605, eventId: 89262367
1695
userId: 4244109605, eventId: 4234138929
1695
userId: 4246010516, eventId: 955398943
144
userId: 4246010516, eventId: 1077729842
144
userId: 4246010516, eventId: 3735036412
144
userId: 4246010516, eventId: 2641648909
144
userId: 4246010516, eventId: 1600413013
144
userId: 4246010516, eventId: 3952438126
144
userId: 4246728549, eventId: 2133183406
1981
userId: 4246728549, eventId: 2249210117
1981
userId: 4246728549, eventId: 2529072432
1981
userId: 4246728549, eventId: 4116595591
1981
userId: 4246728549, eventId: 3388135408
1981
userId: 4246728549, eventId: 1361307272
1981
userId: 4246728549, eventId: 2650202363
1981
userId: 4246728549, eventId: 602394192
1981
userId: 4246728549, eventId: 3230650403
1981
userId: 4246728549, eventId: 1638992821
1981
userId: 4246728549, eventId: 771676713
1981
userId: 4246728549, eventId: 827394707
1981
userId: 4246728549, eventId: 2489566262
1981
userId: 4246728549, eventId: 3029325544
1981
userId: 4246728549, eventId: 45687644
1981
userId: 4246728549, eventId: 3454377311
1981
userId: 4246728549, eventId: 3001071751
1981
userId: 4246728549, eventId: 1313929779
1981
userId: 4247553940, eventId: 963733660
612
userId: 4247553940, eventId: 1213812933
612
userId: 4247553940, eventId: 1030590642
612
userId: 4247553940, eventId: 4150407592
612
userId: 4247553940, eventId: 146887909
612
userId: 4247553940, eventId: 4155847923
612
userId: 4247824186, eventId: 3632072502
3331
userId: 4247824186, eventId: 719337372
3331
userId: 4247824186, eventId: 2529072432
3331
userId: 4247824186, eventId: 1390707377
3331
userId: 4247824186, eventId: 2254372858
3331
userId: 4247824186, eventId: 1993111201
3331
userId: 4247824186, eventId: 392004313
3331
userId: 4247824186, eventId: 448070308
3331
userId: 4257951883, eventId: 3478806116
783
userId: 4257951883, eventId: 2178315774
783
userId: 4257951883, eventId: 3062356265
783
userId: 4257951883, eventId: 1072343159
783
userId: 4257951883, eventId: 3599006720
783
userId: 4257951883, eventId: 2422402842
783
userId: 4257951883, eventId: 183080593
783
userId: 4257951883, eventId: 1180607121
783
userId: 4257951883, eventId: 881849271
783
userId: 4261340176, eventId: 1879190850
2792
userId: 4261340176, eventId: 3640265762
2792
userId: 4261340176, eventId: 3521274632
2792
userId: 4261340176, eventId: 3371362346
2792
userId: 4261340176, eventId: 4294096869
2792
userId: 4261340176, eventId: 2390324672
2792
userId: 4261865653, eventId: 322219501
1085
userId: 4261865653, eventId: 3480624055
1085
userId: 4261865653, eventId: 1771812765
1085
userId: 4261865653, eventId: 915403718
1085
userId: 4261865653, eventId: 2748209109
1085
userId: 4261865653, eventId: 1548928340
1085
userId: 4261865653, eventId: 1325647788
1085
userId: 4261865653, eventId: 530307239
1085
userId: 4261865653, eventId: 2621503414
1085
userId: 4261865653, eventId: 2214608095
1085
userId: 4261865653, eventId: 4129023810
1085
userId: 4262496040, eventId: 955398943
597
userId: 4262496040, eventId: 645163767
597
userId: 4262496040, eventId: 4260484947
597
userId: 4262496040, eventId: 2555143768
597
userId: 4262496040, eventId: 4239674720
597
userId: 4262496040, eventId: 2529072432
597
userId: 4262496040, eventId: 1532377761
597
userId: 4262496040, eventId: 719337372
597
userId: 4264591455, eventId: 1269035551
1757
userId: 4264591455, eventId: 1816813281
1757
userId: 4264591455, eventId: 2149464820
1757
userId: 4264591455, eventId: 1203717384
1757
userId: 4264591455, eventId: 1076364848
1757
userId: 4264591455, eventId: 2007279414
1757
userId: 4268611130, eventId: 1767211808
1853
userId: 4268611130, eventId: 2301567733
1853
userId: 4268611130, eventId: 1921275
1853
userId: 4268611130, eventId: 3503466480
1853
userId: 4268611130, eventId: 4188327628
1853
userId: 4268611130, eventId: 709634464
1853
userId: 4269216118, eventId: 3838044081
2474
userId: 4269216118, eventId: 1630489177
2474
userId: 4269216118, eventId: 3316845347
2474
userId: 4269216118, eventId: 2867164384
2474
userId: 4269216118, eventId: 955398943
2474
userId: 4269216118, eventId: 1829625839
2474
userId: 4272342830, eventId: 1269035551
1980
userId: 4272342830, eventId: 1902753965
1980
userId: 4272342830, eventId: 2007279414
1980
userId: 4272342830, eventId: 3309338938
1980
userId: 4272342830, eventId: 952519340
1980
userId: 4272342830, eventId: 673098017
1980
userId: 4275037038, eventId: 237485904
956
userId: 4275037038, eventId: 2122213042
956
userId: 4275037038, eventId: 445373500
956
userId: 4275037038, eventId: 1104077405
956
userId: 4275037038, eventId: 2275768334
956
userId: 4275037038, eventId: 1611840162
956
userId: 4276320842, eventId: 3814249322
703
userId: 4276320842, eventId: 786670004
703
userId: 4276320842, eventId: 3732079142
703
userId: 4276320842, eventId: 3418830493
703
userId: 4276320842, eventId: 2912281746
703
userId: 4276320842, eventId: 1096831542
703
userId: 4276320842, eventId: 2321153776
703
userId: 4276320842, eventId: 559618821
703
userId: 4276320842, eventId: 1095206162
703
userId: 4276320842, eventId: 2867570803
703
userId: 4278168842, eventId: 1707508219
3382
userId: 4278168842, eventId: 795084254
3382
userId: 4278168842, eventId: 1112764536
3382
userId: 4278168842, eventId: 2101402606
3382
userId: 4278168842, eventId: 989190365
3382
userId: 4282954307, eventId: 2985301715
3348
userId: 4282954307, eventId: 3924453080
3348
userId: 4282954307, eventId: 610427555
3348
userId: 4282954307, eventId: 1683157650
3348
userId: 4282954307, eventId: 2328883039
3348
userId: 4282954307, eventId: 1838698560
3348
userId: 4282954307, eventId: 1065677688
3348
userId: 4282954307, eventId: 3338313474
3348
userId: 4282954307, eventId: 2168072348
3348
userId: 4282954307, eventId: 3879978209
3348
userId: 4282954307, eventId: 3431614259
3348
userId: 4282954307, eventId: 1401314683
3348
userId: 4282954307, eventId: 104070
3348
userId: 4282954307, eventId: 3855652876
3348
userId: 4282954307, eventId: 1137018984
3348
userId: 4282954307, eventId: 2504428394
3348
userId: 4285564534, eventId: 3863081535
329
userId: 4285564534, eventId: 1168380708
329
userId: 4285564534, eventId: 1364943007
329
userId: 4285564534, eventId: 663767875
329
userId: 4285564534, eventId: 675426904
329
userId: 4285564534, eventId: 3874905711
329
userId: 4286635694, eventId: 3580442023
2628
userId: 4286635694, eventId: 281688155
2628
userId: 4286635694, eventId: 124989980
2628
userId: 4286635694, eventId: 904102962
2628
userId: 4286635694, eventId: 1449747272
2628
userId: 4286635694, eventId: 750220836
2628
userId: 4286635694, eventId: 1868620616
2628
userId: 4286635694, eventId: 3162029336
2628
userId: 4288238269, eventId: 373308576
2042
userId: 4288238269, eventId: 2806259041
2042
userId: 4288238269, eventId: 1347934681
2042
userId: 4288238269, eventId: 3783800124
2042
userId: 4288238269, eventId: 85168518
2042
userId: 4288238269, eventId: 3867317684
2042
userId: 4291083982, eventId: 2753805623
754
userId: 4291083982, eventId: 2072616125
754
userId: 4291083982, eventId: 2988656322
754
userId: 4291083982, eventId: 395593428
754
userId: 4291083982, eventId: 548484748
754
userId: 4291083982, eventId: 558937896
754
userId: 4293103086, eventId: 1431416915
356
userId: 4293103086, eventId: 2750873665
356
userId: 4293103086, eventId: 4084655790
356
userId: 4293103086, eventId: 598708806
356
userId: 4293103086, eventId: 604179853
356
userId: 4293103086, eventId: 2351245308
356
</pre>
</div>
</div>

</div>
</div>

</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<h3 id="&#22522;&#20110;&#27169;&#22411;&#30340;&#21327;&#21516;&#36807;&#28388;">&#22522;&#20110;&#27169;&#22411;&#30340;&#21327;&#21516;&#36807;&#28388;<a class="anchor-link" href="#&#22522;&#20110;&#27169;&#22411;&#30340;&#21327;&#21516;&#36807;&#28388;">&#182;</a></h3><p>这里就用userEventScores,记录用户对活动感兴趣的这个矩阵来做矩阵分解，用传统的SVD分解。</p>

</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[53]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> 先对userEventScores矩阵进行归一化处理</span>
<span class="sd">&quot;&quot;&quot;</span>

<span class="n">score_norm</span> <span class="o">=</span> <span class="n">userEventScores</span><span class="o">.</span><span class="n">toarray</span><span class="p">()</span>

<span class="k">for</span> <span class="n">col</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">score_norm</span><span class="o">.</span><span class="n">shape</span><span class="p">[</span><span class="mi">1</span><span class="p">]):</span>
    <span class="n">score_norm</span><span class="p">[:,</span> <span class="n">col</span><span class="p">]</span> <span class="o">=</span> <span class="p">(</span><span class="n">score_norm</span><span class="p">[:,</span> <span class="n">col</span><span class="p">]</span> <span class="o">-</span> <span class="n">score_norm</span><span class="p">[:,</span> <span class="n">col</span><span class="p">]</span><span class="o">.</span><span class="n">mean</span><span class="p">())</span> <span class="o">/</span> <span class="n">score_norm</span><span class="p">[:,</span> <span class="n">col</span><span class="p">]</span><span class="o">.</span><span class="n">std</span><span class="p">()</span>

<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> 再计算出协方差矩阵</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="n">m</span> <span class="o">=</span> <span class="n">score_norm</span><span class="o">.</span><span class="n">shape</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
<span class="n">score_conv</span> <span class="o">=</span> <span class="p">(</span><span class="n">score_norm</span><span class="o">.</span><span class="n">T</span> <span class="o">@</span> <span class="n">score_norm</span><span class="p">)</span><span class="o">/</span><span class="n">m</span>
</pre></div>

</div>
</div>
</div>

<div class="output_wrapper">
<div class="output">


<div class="output_area">

<div class="prompt"></div>


<div class="output_subarea output_stream output_stderr output_text">
<pre>C:\ProgramData\Anaconda3\lib\site-packages\ipykernel_launcher.py:8: RuntimeWarning: invalid value encountered in true_divide
  
</pre>
</div>
</div>

</div>
</div>

</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[54]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd">  替换空值</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="n">m</span><span class="p">,</span><span class="n">n</span> <span class="o">=</span> <span class="n">score_conv</span><span class="o">.</span><span class="n">shape</span>
<span class="k">for</span> <span class="n">row</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">m</span><span class="p">):</span>
    <span class="k">for</span> <span class="n">col</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">score_conv</span><span class="p">[</span><span class="n">row</span><span class="p">])):</span>
        <span class="k">if</span> <span class="n">np</span><span class="o">.</span><span class="n">isnan</span><span class="p">(</span><span class="n">score_conv</span><span class="p">[</span><span class="n">row</span><span class="p">][</span><span class="n">col</span><span class="p">]):</span>
            <span class="n">score_conv</span><span class="p">[</span><span class="n">row</span><span class="p">][</span><span class="n">col</span><span class="p">]</span> <span class="o">=</span> <span class="mi">0</span>
<span class="n">score_conv</span>
</pre></div>

</div>
</div>
</div>

<div class="output_wrapper">
<div class="output">


<div class="output_area">

<div class="prompt output_prompt">Out[54]:</div>




<div class="output_text output_subarea output_execute_result">
<pre>array([[  1.00000000e+00,   0.00000000e+00,   0.00000000e+00, ...,
         -2.94985251e-04,  -2.94985251e-04,   0.00000000e+00],
       [  0.00000000e+00,   0.00000000e+00,   0.00000000e+00, ...,
          0.00000000e+00,   0.00000000e+00,   0.00000000e+00],
       [  0.00000000e+00,   0.00000000e+00,   0.00000000e+00, ...,
          0.00000000e+00,   0.00000000e+00,   0.00000000e+00],
       ..., 
       [ -2.94985251e-04,   0.00000000e+00,   0.00000000e+00, ...,
          1.00000000e+00,  -2.94985251e-04,   0.00000000e+00],
       [ -2.94985251e-04,   0.00000000e+00,   0.00000000e+00, ...,
         -2.94985251e-04,   1.00000000e+00,   0.00000000e+00],
       [  0.00000000e+00,   0.00000000e+00,   0.00000000e+00, ...,
          0.00000000e+00,   0.00000000e+00,   0.00000000e+00]])</pre>
</div>

</div>

</div>
</div>

</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[55]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> 进行SVD矩阵分解</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="n">U</span><span class="p">,</span> <span class="n">S</span><span class="p">,</span> <span class="n">V</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">linalg</span><span class="o">.</span><span class="n">svd</span><span class="p">(</span><span class="n">score_conv</span><span class="p">)</span>  <span class="c1"># U: principle components (n, n)</span>
<span class="nb">print</span><span class="p">(</span><span class="s1">&#39;U matrix is&#39;</span><span class="p">,</span><span class="n">U</span><span class="p">)</span>
<span class="nb">print</span><span class="p">(</span><span class="s1">&#39;S mtrix is&#39;</span><span class="p">,</span><span class="n">S</span><span class="p">)</span>
<span class="nb">print</span><span class="p">(</span><span class="s1">&#39;V matrix is&#39;</span><span class="p">,</span><span class="n">V</span><span class="p">)</span>
</pre></div>

</div>
</div>
</div>

<div class="output_wrapper">
<div class="output">


<div class="output_area">

<div class="prompt"></div>


<div class="output_subarea output_stream output_stdout output_text">
<pre>U matrix is [[ -6.85123734e-05   7.14069692e-05  -8.54839075e-05 ...,   1.22862020e-02
   -7.75718861e-03   2.41979318e-02]
 [  8.19933710e-17  -6.38565483e-17   5.91620045e-17 ...,  -2.60594405e-02
   -5.79399534e-03  -4.46108099e-02]
 [  5.00704320e-17  -4.09658989e-18  -1.37672096e-17 ...,   3.65651065e-03
    1.11163739e-02   3.53040359e-02]
 ..., 
 [ -8.74035277e-05   9.52189082e-05  -1.19108985e-04 ...,   6.81527368e-02
    3.02429414e-02   1.98426526e-02]
 [  2.20723606e-01  -4.66328577e-04   2.87526089e-04 ...,  -5.39587103e-03
    2.31620995e-04   4.02451358e-03]
 [  0.00000000e+00   0.00000000e+00   0.00000000e+00 ...,   0.00000000e+00
    0.00000000e+00   0.00000000e+00]]
S mtrix is [  2.05128119e+01   1.80004624e+01   1.61738357e+01 ...,   2.75114195e-16
   2.33653756e-16   1.99266430e-16]
V matrix is [[ -6.85123734e-05   2.17634140e-18   2.49486397e-17 ...,  -8.74035277e-05
    2.20723606e-01   0.00000000e+00]
 [  7.14069692e-05   5.34479265e-19   9.61862827e-18 ...,   9.52189082e-05
   -4.66328577e-04   0.00000000e+00]
 [ -8.54839075e-05  -7.70140927e-19  -1.84824706e-17 ...,  -1.19108985e-04
    2.87526089e-04   0.00000000e+00]
 ..., 
 [  0.00000000e+00  -1.47697776e-02  -3.79471036e-02 ...,   5.35849370e-03
    1.24624511e-03   0.00000000e+00]
 [  0.00000000e+00  -2.39963706e-02   2.73413548e-02 ...,  -2.69245794e-03
   -2.76391907e-04   0.00000000e+00]
 [  0.00000000e+00   3.93467097e-02  -6.46348425e-04 ...,  -1.60198316e-03
    5.45256379e-04   0.00000000e+00]]
</pre>
</div>
</div>

</div>
</div>

</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<p>由于这个矩阵很稀疏，所以用SVD分解很慢，可以直接进行矩阵分解，用P×Q来近似得到userEventScores用户-评分矩阵
<img src="attachment:image.png" alt="image.png">
 引入L2的正则项<br/>
 然后根据P和Q的梯度分别计算</p>

</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[56]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="k">def</span> <span class="nf">matrix_divide</span><span class="p">(</span><span class="n">R</span><span class="p">,</span> <span class="n">P</span><span class="p">,</span> <span class="n">Q</span><span class="p">,</span> <span class="n">K</span><span class="p">,</span> <span class="n">steps</span><span class="o">=</span><span class="mi">500</span><span class="p">,</span> <span class="n">alpha</span><span class="o">=</span><span class="mf">0.0001</span><span class="p">,</span> <span class="n">beta</span><span class="o">=</span><span class="mf">0.01</span><span class="p">):</span>
    <span class="c1">#迭代计算3000次，alpha和beta都是学习率</span>
    <span class="n">Q</span> <span class="o">=</span> <span class="n">Q</span><span class="o">.</span><span class="n">T</span>
    <span class="k">for</span> <span class="n">step</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">steps</span><span class="p">):</span>
        <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">R</span><span class="p">)):</span>
            <span class="k">for</span> <span class="n">j</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">R</span><span class="p">[</span><span class="n">i</span><span class="p">])):</span>
                <span class="k">if</span> <span class="n">R</span><span class="p">[</span><span class="n">i</span><span class="p">][</span><span class="n">j</span><span class="p">]</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
                    <span class="c1">#初始化误差</span>
                    <span class="n">eij</span> <span class="o">=</span> <span class="n">R</span><span class="p">[</span><span class="n">i</span><span class="p">][</span><span class="n">j</span><span class="p">]</span> <span class="o">-</span> <span class="n">np</span><span class="o">.</span><span class="n">dot</span><span class="p">(</span><span class="n">P</span><span class="p">[</span><span class="n">i</span><span class="p">,:],</span><span class="n">Q</span><span class="p">[:,</span><span class="n">j</span><span class="p">])</span>
                    <span class="k">for</span> <span class="n">k</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">K</span><span class="p">):</span>
                        <span class="c1">#计算P、Q矩阵的梯度值</span>
                        <span class="n">P</span><span class="p">[</span><span class="n">i</span><span class="p">][</span><span class="n">k</span><span class="p">]</span> <span class="o">=</span> <span class="n">P</span><span class="p">[</span><span class="n">i</span><span class="p">][</span><span class="n">k</span><span class="p">]</span> <span class="o">+</span> <span class="n">alpha</span> <span class="o">*</span> <span class="p">(</span><span class="mi">2</span> <span class="o">*</span> <span class="n">eij</span> <span class="o">*</span> <span class="n">Q</span><span class="p">[</span><span class="n">k</span><span class="p">][</span><span class="n">j</span><span class="p">]</span> <span class="o">-</span> <span class="n">beta</span> <span class="o">*</span> <span class="n">P</span><span class="p">[</span><span class="n">i</span><span class="p">][</span><span class="n">k</span><span class="p">])</span>
                        <span class="n">Q</span><span class="p">[</span><span class="n">k</span><span class="p">][</span><span class="n">j</span><span class="p">]</span> <span class="o">=</span> <span class="n">Q</span><span class="p">[</span><span class="n">k</span><span class="p">][</span><span class="n">j</span><span class="p">]</span> <span class="o">+</span> <span class="n">alpha</span> <span class="o">*</span> <span class="p">(</span><span class="mi">2</span> <span class="o">*</span> <span class="n">eij</span> <span class="o">*</span> <span class="n">P</span><span class="p">[</span><span class="n">i</span><span class="p">][</span><span class="n">k</span><span class="p">]</span> <span class="o">-</span> <span class="n">beta</span> <span class="o">*</span> <span class="n">Q</span><span class="p">[</span><span class="n">k</span><span class="p">][</span><span class="n">j</span><span class="p">])</span>
        <span class="n">eR</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">dot</span><span class="p">(</span><span class="n">P</span><span class="p">,</span><span class="n">Q</span><span class="p">)</span>
        <span class="n">e</span> <span class="o">=</span> <span class="mi">0</span>
        <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">R</span><span class="p">)):</span>
            <span class="k">for</span> <span class="n">j</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">R</span><span class="p">[</span><span class="n">i</span><span class="p">])):</span>
                <span class="k">if</span> <span class="n">R</span><span class="p">[</span><span class="n">i</span><span class="p">][</span><span class="n">j</span><span class="p">]</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
                    <span class="c1">#计算误差平方和</span>
                    <span class="n">e</span> <span class="o">=</span> <span class="n">e</span> <span class="o">+</span> <span class="nb">pow</span><span class="p">(</span><span class="n">R</span><span class="p">[</span><span class="n">i</span><span class="p">][</span><span class="n">j</span><span class="p">]</span> <span class="o">-</span> <span class="n">np</span><span class="o">.</span><span class="n">dot</span><span class="p">(</span><span class="n">P</span><span class="p">[</span><span class="n">i</span><span class="p">,:],</span><span class="n">Q</span><span class="p">[:,</span><span class="n">j</span><span class="p">]),</span> <span class="mi">2</span><span class="p">)</span>
                    <span class="c1">#计算正则项，按照隐含变量的累积和 ，beta是学习率</span>
                    <span class="k">for</span> <span class="n">k</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">K</span><span class="p">):</span>
                        <span class="n">e</span> <span class="o">=</span> <span class="n">e</span> <span class="o">+</span> <span class="p">(</span><span class="n">beta</span><span class="o">/</span><span class="mi">2</span><span class="p">)</span> <span class="o">*</span> <span class="p">(</span> <span class="nb">pow</span><span class="p">(</span><span class="n">P</span><span class="p">[</span><span class="n">i</span><span class="p">][</span><span class="n">k</span><span class="p">],</span><span class="mi">2</span><span class="p">)</span> <span class="o">+</span> <span class="nb">pow</span><span class="p">(</span><span class="n">Q</span><span class="p">[</span><span class="n">k</span><span class="p">][</span><span class="n">j</span><span class="p">],</span><span class="mi">2</span><span class="p">)</span> <span class="p">)</span>
        <span class="k">if</span> <span class="n">e</span> <span class="o">&lt;</span> <span class="mf">0.005</span><span class="p">:</span>
            <span class="k">break</span>
    <span class="k">return</span> <span class="n">P</span><span class="p">,</span> <span class="n">Q</span><span class="o">.</span><span class="n">T</span>
</pre></div>

</div>
</div>
</div>

</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[&nbsp;]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="n">row</span> <span class="o">=</span> <span class="n">score_norm</span><span class="o">.</span><span class="n">shape</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
<span class="n">col</span> <span class="o">=</span> <span class="n">score_norm</span><span class="o">.</span><span class="n">shape</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>

<span class="c1">#隐含变量的个数，为了计算效率，先计算个数是2的情况</span>
<span class="n">K</span> <span class="o">=</span> <span class="mi">2</span>

<span class="c1">#定义P和Q矩阵，这两个矩阵的乘机来直接模拟用户-评分矩阵  ---userEventScores</span>
<span class="n">P</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">random</span><span class="o">.</span><span class="n">rand</span><span class="p">(</span><span class="n">row</span><span class="p">,</span><span class="n">K</span><span class="p">)</span>
<span class="n">Q</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">random</span><span class="o">.</span><span class="n">rand</span><span class="p">(</span><span class="n">col</span><span class="p">,</span><span class="n">K</span><span class="p">)</span>

<span class="n">nP</span><span class="p">,</span> <span class="n">nQ</span> <span class="o">=</span> <span class="n">matrix_divide</span><span class="p">(</span><span class="n">score_norm</span><span class="p">,</span> <span class="n">P</span><span class="p">,</span> <span class="n">Q</span><span class="p">,</span> <span class="n">K</span><span class="p">)</span>
<span class="nb">print</span><span class="p">(</span><span class="n">nP</span><span class="p">,</span><span class="n">nQ</span><span class="p">)</span>
</pre></div>

</div>
</div>
</div>

</div>
    </div>
  </div>
</body>

 


</html>
